【发布时间】:2013-04-05 14:53:49
【问题描述】:
我有一个与矢量有关的问题,尤其是选项 .push_back() 和 .resize()。 使用此选项时,当当前向量容量超出时,c++(STL) 将始终重新分配每个元素。这对我来说是个问题,因为我确实有一个结构对象向量。
std::vector<node> v;
我的结构看起来像这样,并保持指向向量其他元素的指针
struct node
{
std::array<node*, nrOfNeigh> neighb;
node* parentNode;
double density;
...
}
因为我的结构确实有指向向量其他元素的指针,所以在使用 .push_back() 时,这种依赖关系将不再有效。
你们中有人有避免这种情况的想法吗?
我不希望有办法强制 std::vector 不重新分配。
我已经尝试使用 .reserve() 并因此尽可能多地保留。这是可能的,但从内存管理的角度来看并不好。
【问题讨论】:
-
一定要用
std::vector吗? -
好吧,当你调用
push_back并且没有剩余容量时,它还应该做什么? -
您可以通过
reserve()函数为您的向量保留最大位置。您可以提供向量的最大容量 -
为什么需要一个指向数组元素的指针?为什么不只维护 index?
-
@Sambo 您还没有回答“为什么需要指针而不是索引”的问题。如果使用索引,则可以在需要时获取指针,即使重新分配向量,索引也永远不会出错。这似乎是您问题的明显答案。
标签: c++ performance memory-management stl