c++ vector 通过使用 .push_back 或 .resize() 避免重新分配

标签 c++ performance memory-management stl

我有一个与 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/

相关文章:

c++ - ChangeDisplaySettingsEx() 总是返回 DISP_CHANGE_BADPARAM

performance - 为什么我的 postgreSQL 索引没有被使用?

multithreading - 使用 GO 时如何测量系统过载

windows - 当它可以访问的总内存也被限制为4GB时,Windows如何为多个进程每个分配4GB地址空间

c++ - 静态链接 V8

c++ - 如何将此 C 代码行转换为等效的 C++ 代码?

java - 如何将 JDBC ResultSet 检索为 ArrayList?

c++ - 分配二维数组时的内存管理

python - 如何为 Windows 64 位 Python 2.7 编译孔雀鱼?

c++ - 为什么具有非常量值的数组定义没有编译错误?