【问题标题】:Accessing Vector of Nodes访问节点向量
【发布时间】:2014-05-29 05:24:08
【问题描述】:

只是一个快速的 C++ 问题。我一直在尝试将向量内的节点保存到节点的右子节点。

例如,

我有一个名为 node 的结构,它有一个指向左孩子和右孩子的指针。 所以:

struct node{
     node *left;
     node *right;
};

我的节点向量,

vector<node> nodeVec;

也由节点组成。

目标是从我的向量中取出一个节点并保存为新节点的左右子节点。

所以:

node *tree = new node();
tree->left = *nodeVec.at(0);
tree->right = *nodeVec.at(1);

但它会抛出一个错误,指出它无法识别“*”运算符。只是尝试

tree->left = nodeVec.at(0)

它说我无法将节点转换为节点*。

但如果我使用,

tree->left = &nodeVec.at(0)

它成功地将地址保存在我的左孩子中。 我查看了几个网站和答案,我认为是在这里找到的,

Dereference vector pointer to access element,

可能是最相关的。我试了一下,出错了这么多,我不太明白。

简而言之,根据我的阅读,我需要取消引用向量内的节点。但如果它不接受 '*' 运算符,那该怎么做呢?

提前致谢!

【问题讨论】:

    标签: c++ pointers vector


    【解决方案1】:

    您可以像这样访问向量中的节点:

    node* p_left = nodeDev.at(0).left;
    
    node copy_constructed_node(*(nodeDev.at(0).right));
    

    你也可以使用你的tree:

    node* p_left = tree->left;  // your code set this to &nodeVec[0]
    

    更一般地说,我建议您对指针进行一些背景阅读(可能是 here),或者 - 更好的是 - 考虑标准容器是否能满足您的需求 - 例如std::map (tutorial here)。

    【讨论】:

      猜你喜欢
      • 2011-01-11
      • 2019-01-21
      • 2021-02-17
      • 2017-03-24
      • 2017-10-23
      • 2016-09-06
      • 2021-04-27
      • 1970-01-01
      相关资源
      最近更新 更多