我想我可以只使用一个列表,但此时我只是好奇为什么以下代码不起作用:
struct treeNode{
char symbol;
double freq;
int left;
int right;
};
treeNode *tree;
int nOS = 16;
tree = (treeNode *)malloc(sizeof(treeNode) * nOS);
list<treeNode> treeList;
初始化树中的所有元素后,我尝试将它们推送到treeList并获得分段错误,如果树是treeNode树[nOS],则不会发生但是我正在处理未知数量的元素,所以我需要能够使用realloc,因此使用malloc:
for (int i = 0; i < nOS; i++) {
treeList.push_back(tree[i]);
}
我尝试将树[i]转换为各种各样的东西:(treeNode),(const treeNode)但我无法弄清楚如何让它工作。谢谢!
答案 0 :(得分:2)
我在ideone中完成了this,它似乎有用:(没有段错误)
#include<list>
#include<vector>
#include <stdlib.h>
#include<iostream>
struct treeNode{
char symbol;
double freq;
int left;
int right;
};
int main(int argc, char** argv)
{
treeNode *tree;
int nOS = 16;
tree = (treeNode *)malloc(sizeof(treeNode) * nOS);
std::list<treeNode> treeList;
std::vector<treeNode> symbolList;
for (int i = 0; i < nOS; i++) {
symbolList.push_back(tree[i]);
}
std::cout << symbolList.size();
};
答案 1 :(得分:1)
如果您只是按值(而不是指针)将它们推入列表,则不需要malloc
结构。代码可以重写为:
struct treeNode {
char symbol;
double freq;
int left;
int right;
};
int main()
{
const int nOS = 16;
std::list<treeNode> treeList(nOS, treeNode());
std::cout << treeList.size() << std::endl;
return 0;
}
虽然对于一棵树,你通常会有指向左/右节点的指针,所以结构可能是这样的:
struct treeNode {
char symbol;
double freq;
struct treeNode *left;
struct treeNode *right;
};