在 C++ 中,vector 类型的 insert 方法是一个重要的成员函数,用于在指定位置插入元素。下面将详细介绍这个方法的基本用法、特点和注意事项,以及提供一个示例代码。

基本用法

std::vectorinsert 方法允许在向量中的特定位置插入一个或多个元素。这个方法接收的第一个参数是一个迭代器,指示插入位置。其余参数取决于插入操作的类型。

特点和注意事项

  • 位置指定insert 方法需要一个迭代器来指定插入的位置。如果位置迭代器不合法(比如超出了向量的当前范围),程序可能会崩溃。
  • 性能考虑:在 vector 中间插入元素可能导致后面所有元素的移动,这可能是一个开销较大的操作,特别是对于含有大量元素的 vector
  • 容量调整:如果需要的话,insert 操作会增加 vector 的容量,以容纳新元素。
  • 多种重载insert 方法有多种重载形式,可以插入单个元素、插入另一个容器中的元素范围,甚至插入多个重复的元素。

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <vector>

int main() {
std::vector<int> vec = {10, 20, 30, 40};

// 插入单个元素
auto it = vec.begin() + 2; // 在第三个元素之前插入
vec.insert(it, 25);

// 插入多个重复元素
vec.insert(vec.begin() + 1, 3, 15); // 在第二个元素位置插入三个15

// 输出结果
for (int num : vec) {
std::cout << num << " ";
}

return 0;
}

在这个例子中,我们首先在第三个元素前插入了一个值为 25 的元素,然后在第二个元素的位置插入了三个值为 15 的元素。注意在插入元素后,迭代器可能会失效,因此在插入后重新获取迭代器的位置是一个好习惯。

vectorinsert另一个vector

如果要使用 std::vectorinsert 方法插入另一个 vector,可以通过指定插入范围的方式来完成。这通常涉及到提供一个插入点(通过迭代器指定)以及被插入 vector 的开始和结束迭代器。

使用范围插入的基本语法如下:

1
vector.insert(position, startIterator, endIterator);
  • position 是一个指向原 vector 中的位置的迭代器,表示新元素插入的位置。
  • startIteratorendIterator 分别是被插入 vector 的开始和结束迭代器,定义了要插入的元素范围。

特点和注意事项

  • 迭代器失效:在 insert 操作后,原 vector 的迭代器可能会失效,特别是如果发生内存重新分配时。
  • 性能影响:插入操作会导致从插入点到 vector 末尾的所有元素被移动,因此在大型 vector 中执行插入操作可能会影响性能。
  • 自我插入:要注意不要尝试将 vector 的部分内容插入到自身中,这可能导致未定义的行为。

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <vector>

int main() {
std::vector<int> vec1 = {1, 2, 3, 4};
std::vector<int> vec2 = {5, 6, 7, 8};

// 在 vec1 的第三个元素前插入 vec2 的所有元素
vec1.insert(vec1.begin() + 2, vec2.begin(), vec2.end());

// 输出 vec1 的内容
for (int num : vec1) {
std::cout << num << " ";
}

return 0;
}

在这个例子中,vec1 初始包含元素 {1, 2, 3, 4},然后我们在其第三个元素前插入了 vec2 中的所有元素,最终 vec1 的内容变为 {1, 2, 5, 6, 7, 8, 3, 4}


本站由 @anonymity 使用 Stellar 主题创建。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。