插入元素
在向量的末尾添加元素(通过复制/移动):
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 个元素的向量,其中只有后一个元素具有你想要的值。