我找不到任何可以给出明确答案的东西.我只是好奇,如果std :: vector只在绝对必须时重新分配它的内部数组,或者它会在预期中提前重新分配(可以这么说).
例如:
std::vector<int> myVector;
for (int i = 0; i < 1000; ++i) myVector.push_back(i);
cout << myVector.size() << '\n' // Gives 1000 as expected
<< myVector.capacity() << endl; // Gives 1024 which makes sense
Run Code Online (Sandbox Code Playgroud)
如果我继续添加元素,是否有可能我添加的下24个项目中的一个会改变容量,或者只有在我放入第25个项目后它才会重新分配?
注意:
我在Linux下使用gcc 4.4.3进行了测试,但似乎重新分配是"按需"完成的,但我很好奇我是不是很幸运,或者有什么东西说明这是预期的行为.
resize() 根据给定的大小添加/删除元素。Reserve() 保留内存空间,它不会重新分配内存。我的问题是 resize 是否也与向量的容量相同,只是不会增加?
要添加,将组合:
std::vector<X> vector;
vector.reserve(5);
vector.resize(5);
Run Code Online (Sandbox Code Playgroud)
有道理吗?是多余的吗?这里的目标是能够覆盖向量中的值,而无需向量分配任何额外空间。