为已知数量的结构分配足够的内存

Allocating Sufficient Memory for a Known Number of Structs

第一次实现调用构造函数时已知节点总数且性能是最高优先级的图。

之前没有分配过内存,所以过程有点懵

所需的节点数为 (n*(n+1))/2,其中 n 是传递给构造函数的字符串的长度。

#include <string>
struct ColorNode {
    ColorNode* lParent;
    ColorNode* rParent;
    char color;
};

class ParentGraph {
    std::string base;
    int len, nodes;

    ParentGraph(std::string b): base(b) {
        len = base.length();
        nodes = (len * (len + 1)) / 2;

        // how to allocate enough memory for number of copies of "ColorNode" equal to "nodes"?
    }
};

在此实例中分配内存的最佳做法是什么?

预先分配内存会对性能产生重大影响吗?

事实证明数组或向量是更好的选择,但确实需要在数据结构和内存分配方面进行实践。

感谢您的考虑。

使用

std::vector<ColorNode> nodes;

以后的生活会很简单

如果您知道自己想要的尺码

,可以对std::vector有所帮助
auto nodes = std::vector<ColorNode>(size);

这将为您在堆上分配一个连续的数组,管理它的增长、分配、释放等。

如果你这样做 new ColorNode[size](或者甚至 malloc(....) 如果一些邪恶的人试图说服你原始 malloc 会更快),你基本上会得到相同的内存结构。但是你必须自己做所有讨厌的管理。

只有当您有太多对象无法放入一个连续的内存块时,您才需要偏离这一建议。如果是这样就说