我正在寻找一种方法来阻止std :: vectors / std :: strings在给定的大小范围内增长(假设我想假设一个字符串将包含大约64个字符,但是如果需要它可以增长)。实现这一目标的最佳方法是什么?
答案 0 :(得分:3)
查看.reserve()
成员函数。 standard docs at the SGI site说
[4] Reserve()会手动重新分配。主要原因 使用reserve()是效率:如果你知道你的容量 矢量必须最终成长,然后它通常更有效 一次分配该内存而不是依赖于自动 重新分配计划。使用reserve()的另一个原因是这样的 您可以控制迭代器的失效。 [5]
[5]向量的迭代器在其内存为空时失效 重新分配。此外,插入或删除中的元素 向量的中间使所有指向元素的迭代器无效 在插入或删除点之后。你可以这样做 如果使用,阻止向量的迭代器失效 reserve()预分配与向量一样多的内存, 如果所有插入和删除都在向量的末尾。
那就是说,作为一般规则,除非你真的知道会发生什么,最好让STL容器处理分配本身。
答案 1 :(得分:2)
您可以通过vector
成员函数为string
和reserve(size_type capacity)
预留空间。但它并没有阻止任何事情:)。你只是告诉它至少分配那么多未初始化的内存(也就是说,不会调用你的类型的构造函数),并在需要时调整大小。
std::vector<MyClass> v;
v.reserve(100); //no constructor of MyClass is called
for(int i = 0; i < 100; ++i)
{
v.push_back(MyClass()); // no reallocation will happen. There is enough space in the vector
}
答案 2 :(得分:2)
对于vector:
std::vector<char> v;
v.reserve(64);
对于字符串:
std::string s;
s.reserve(64);
您的C ++标准库参考在哪里?
答案 3 :(得分:0)
它们都有名为reserve
的成员函数,可用于保留空间。
c.reserve(100); //where c is vector (or string)