从a previous question about vector capacity,贝利先生说:C++的std :: vector的内存/分配
在当前的C++可以保证不发生重新分配后的呼叫保留,直到插入将采取大小超出值之前的预留通话。在保留呼叫之前,或者在呼叫保留时,如果大小介于之前保留的呼叫的值和容量之间,则允许实施尽早重新分配。
因此,如果我理解正确,为了确保在容量超过之前不会发生重新分配,我必须做两次储备?你能澄清一下吗?
我使用矢量作为这样的存储栈:
std::vector<double> memory;
memory.reserve(size);
memory.insert(memory.end(), matrix.data().begin(), matrix.data().end()); // smaller than size
memory.resize(memory.capacity(), 0);
我需要保证重新分配并不在上述情况发生。
谢谢。
PS:我也想知道是否有比矢量
好的,谢谢。 我不是说英语的人,那句话对我来说有点困惑 – Anycorn 2010-05-03 22:20:52
@Mark,我觉得这个条目不太清楚。 C++的0 23.3.6.2.2 FCD更清晰:作用:一个指令,通知向量计划的更改大小,以便它可以相应地管理存储分配。在reserve()之后,如果 重新分配发生,capacity()大于或等于reserve的参数;并等于先前的capacity()的值,否则。当且仅当当前容量小于reserve()的参数时,此时重新分配 。如果除非通过非CopyConstructible类型的移动构造函数引发异常 ,则不会有效果。 – 2010-05-03 23:31:31