插入元素

在向量的末尾新增元素(通過複製/移動):

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 個元素的向量,其中只有後一個元素具有你想要的值。