我正在使用如下代码:
const int MY_SIZE = 100000;
std::vector<double> v;
v.reserve(MY_SIZE);
// add no more than MY_SIZE elements to the vector
f(v);
v.clear();
// again, add no more than MY_SIZE elements to the vector
f(v);
v.clear();
//
// etc...
//
我的代码的重点是存储MY_SIZE double's 然后f(std::vector<double>)对这些元素执行操作。在我填满向量并执行操作后,我想摆脱所有元素(并重置std::vector::size()为 0),然后添加更多元素。但是,这里的关键是我不想改变分配给向量的内存空间。
请注意,我永远不会向 中添加多个MY_SIZE元素v,因此v永远不需要重新分配比v.reserve(MY_SIZE).
那么,当我调用v.clear()上面的代码时,它会以任何方式影响分配的空间量v.reserve(MY_SIZE)或内存中的位置v.begin()吗?
相关问题:如果我打电话v.erase(v.begin(),v.begin()+v.size()),它会以任何方式影响分配的空间量v.reserve(MY_SIZE)或内存中的位置v.begin()吗?
如果我真的只是想擦除所有元素,我会调用clear(). 但是我想知道这个相关问题,因为有时我只需要擦除 的前 X 个元素v,并且在这些情况下,我想保留分配的内存v.reserve(MY_SIZE)并且我不希望v更改 的位置。