【发布时间】:2013-12-04 07:12:45
【问题描述】:
我知道 std::vector 最初需要多少空间。所以我使用.resize() 将新向量设置为该大小。但是当之后使用.push_back() 时,它会在分配的大小末尾添加元素,将其增加一。
如何在调整大小的矢量的空白处自动添加新元素?
【问题讨论】:
-
使用
reserve而不是resize。然后您可以像往常一样push_back,但不会导致任何内存重新分配。
我知道 std::vector 最初需要多少空间。所以我使用.resize() 将新向量设置为该大小。但是当之后使用.push_back() 时,它会在分配的大小末尾添加元素,将其增加一。
如何在调整大小的矢量的空白处自动添加新元素?
【问题讨论】:
reserve 而不是resize。然后您可以像往常一样push_back,但不会导致任何内存重新分配。
如何在调整大小的矢量的空白处自动添加新元素?
这就是你正在做的事情。 resize 用值初始化的元素填充新空间,因此没有“空位”。看来您需要改为致电std::vector::reserve。
std::vector<int> v{1,2,3,4}; // size = 4
v.reserve(100); // size = 4, capacity = 100
v.push_back(5); // no re-allocations. size 5.
【讨论】:
通过使用方法reserve 而不是resize,您的push_back 将在不重新分配内存的情况下完成这项工作。
【讨论】: