插入元素
在向量的末尾新增元素(通過複製/移動):
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::list
或 std::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 個元素的向量,其中只有後一個元素具有你想要的值。