我有一个与 vector 相关的问题,尤其是选项 .push_back() 和 .resize()。 使用此选项时,c++(STL) 将始终在当前 vector 容量超出范围时重新分配每个元素。这对我来说是个问题,因为我确实有一个结构对象 vector 。
std::vector<node> v;
我的结构看起来像这样并保持指向 vector 其他元素的指针
struct node
{
std::array<node*, nrOfNeigh> neighb;
node* parentNode;
double density;
...
}
因为我的结构确实有指向 vector 的其他元素的指针,所以在使用 .push_back() 时,此依赖项将不再有效。
你们有什么想法可以避免这种情况吗?
我不希望有办法强制 std::vector 不重新分配。
我已经尝试使用 .reserve() 并因此尽可能多地保留。这是可能的,但从内存管理的角度来看并不好。
最佳答案
假设结构中的 node* 字段仅指向 vector 中的其他“节点”对象,您可以将 node* 替换为 vector 中的整数索引。
具体而言,
struct node
{
std::array<size_t, nrOfNeigh> neighb;
size_t parentNodeId;
double density;
...
}
现在,当您使用 push_back() 时,您存储的不是 &v.back(),而是“v.size()-1”。
关于c++ vector 通过使用 .push_back 或 .resize() 避免重新分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15837080/