将指向数组的指针元素推送到C ++中的std :: list

时间:2011-05-28 10:20:45

标签: c++ list pointers casting tree

我想我可以只使用一个列表,但此时我只是好奇为什么以下代码不起作用:

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)但我无法弄清楚如何让它工作。谢谢!

2 个答案:

答案 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;
};