插入元素

在向量的末尾添加元素(通过复制/移动):

struct Point {
  double x, y;
  Point(double x, double y) : x(x), y(y) {}
};
std::vector<Point> v;
Point p(10.0, 2.0);
v.push_back(p);  // p is copied into the vector.

Version >= C++ 11

通过构造元素来在向量的末尾追加元素:

std::vector<Point> v;
v.emplace_back(10.0, 2.0); // The arguments are passed to the constructor of the
                           // given type (here Point). The object is constructed
                           // in the vector, avoiding a copy.

需要注意的是 std::vector不会有由于性能原因 push_front() 成员函数。在开头添加元素会导致向量中的所有现有元素被移动。如果你想频繁地在容器的开头插入元素,那么你可能想要使用 std::liststd::deque

在向量的任何位置插入元素:

std::vector<int> v{ 1, 2, 3 };
v.insert(v.begin(), 9);          // v now contains {9, 1, 2, 3}

Version >= C++ 11

通过构造元素将元素插入向量的任何位置:

std::vector<int> v{ 1, 2, 3 };
v.emplace(v.begin()+1, 9);     // v now contains {1, 9, 2, 3}

在向量的任何位置插入另一个向量:

std::vector<int> v(4);      // contains: 0, 0, 0, 0
std::vector<int> v2(2, 10); // contains: 10, 10
v.insert(v.begin()+2, v2.begin(), v2.end()); // contains: 0, 0, 10, 10, 0, 0

在向量的任何位置插入数组:

std::vector<int> v(4); // contains: 0, 0, 0, 0
int a [] = {1, 2, 3}; // contains: 1, 2, 3
v.insert(v.begin()+1, a, a+sizeof(a)/sizeof(a[0])); // contains: 0, 1, 2, 3, 0, 0, 0

如果事先知道结果向量大小,则在插入多个元素之前使用 reserve() 以避免多次重新分配(请参阅向量大小和容量 ):

std::vector<int> v;
v.reserve(100);
for(int i = 0; i < 100; ++i)
    v.emplace_back(i);

在这种情况下,一定不要错误地调用 resize() ,否则你将无意中创建一个包含 200 个元素的向量,其中只有后一个元素具有你想要的值。