class TreeNode {
public:
    Box box;
    vector<int> points;
    vector<TreeNode> children;
};


我有这个简单的节点类。我将节点添加到向量中,然后像这样遍历该向量:

TreeNode root;
vector<TreeNode> activeNodeList;
activeNodeList.push_back(root);

vector<TreeNode>::iterator b = activeNodeList.begin();

while (b != activeNodeList.end()) {
    vector<TreeNode> tempNodeList;
    // tempNodeList is populated with multiple TreeNode's
    (*b.base()).children = tempNodeList;
}


在调试器中,将activeNodeList中存储的节点的子代设置为tempNodeList,但是根的子代矢量仍然为空,这是为什么呢?

最佳答案

这条线

activeNodeList.push_back(root);


root复制到activeNodeList。使用activeNodeList进行的所有其他操作将影响此副本,而不影响root本身。

你可以这样做:

activeNodeList.push_back(TreeNode{});
TreeNode& root = activeNodeList.back();


现在root将成为对新添加元素的引用。但请注意:如果activeNodeList重新分配,则此引用将成为悬空的引用。

关于c++ - 将对象添加到 vector ,然后从迭代器更新它,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58967735/

10-11 01:05