在C 中初始化结构数组
Initialize array of structs in C++
我在我的代码中具有结构节点:
struct Node {
Node() : prev(0), left(0), right(0) {}
Node* prev;
Node* left;
Node* right;
char val;
};
i初始化类似节点的结构对象的数组:
Node** pool = new Node*[10000000];
我认为它将使用Defoult构造器创建节点结构对象,但实际上数组似乎是空的。是否有任何有效的方法来创建"空"对象的数组?
您应该使用 std::vector<>
;在C 中使用new
的理由很少。
auto pool = std::vector<Node>(10000000);
(您的原始代码是创建Node*
S,而不是Node
s。(
如果由于某种原因您不想使用vector
,则可以使用std::unique_ptr<>
。该代码将是
std::unique_ptr<Node[]> pool(new Node[10000000]);
但是您确实应该使用vector
。
另外,您可以简化和改进Node
:
struct Node final {
Node* prev = nullptr;
Node* left = nullptr;
Node* right = nullptr;
char val = ' ';
Node(const Node&) = delete;
Node& operator(const Node&) = delete;
};
如果您要构建AST/ASG,并且不需要线性数据结构,则可以考虑仍然考虑使用::std::vector<>
分配内容,这可能会给您带来缓存的位置。
您仍然可以通过结构中的指针链接单个Node
对象。如果您然后使用索引而不是指针,则每当您的池中可用对象用完时,甚至可以调整矢量大小。
Node** pool = new Node*[10000000];
构造Node*
的数组而不是Node
。您正在寻找的是
Node* pool = new Node[10000000];
构造Node
的数组。如果您实际上想要Node*
的数组,则适当的初始化是
int nObjects = 10000000;
Node** pool = new Node[nObjects];
for(auto i = 0; i < nObjects; ++i) {
pool[i] = new Node();
}
正如其他人所说的那样,您可能不想使用new
或C风格数组。
相关文章:
- C++将文本文件中的数据读取到结构数组中
- JSON转换为nlohmann JSON-lib中的结构数组
- 需要帮助将结构数组传递给函数
- 在 64 位边界上对齐C++结构数组?
- 带有枚举方向/类型的气泡排序结构数组
- 在C++中访问结构数组中的数据
- 从指向结构数组的指针中提取元素
- 如何制作一个地图,其中的值是C++中的结构数组
- 如何在函数中显示结构数组
- 包含作为成员C++函数的结构数组
- 如何修复函数中的 fstream 文件输入以将正确的信息存储在结构数组中?
- std::transform 将一个结构数组复制到另一个结构数组
- 将非托管结构数组封送到托管数组
- 显示结构数组
- 结构数组中所有类似字段的总和
- 结构数组的构造函数错误,错误消息:没有构造函数实例与参数列表匹配
- 在 glsl opengl 中将嵌套结构数组作为统一传递
- 使用初始化列表填充C++中的多维结构数组时出现问题
- 如何将字符串字符与结构数组进行比较?
- C++结构数组