gpt4 book ai didi

c++ - 使用 BOOST_FOREACH 修改 std::vector 中的指针

转载 作者:行者123 更新时间:2023-11-28 03:19:11 27 4
gpt4 key购买 nike

我有一个类node并宣布 std::vector<node*> .我想使用 BOOST_FOREACH 来迭代 vector ,但我遇到了一个小问题。

我的代码是这样的:

data_flow_graph* dfg;
node* other_node;

[...]

BOOST_FOREACH(node* n, vector_of_nodes){
if (n->get_id() < 100)){
n = new node(last_id++);
n->add_related_node(other_node);
dfg->add_node(n);
}
}

这是,我尝试在遍历指针的同时修改指针的地址。问题是,尽管创建了新节点,但 vector_of_nodes 中的指针保持不变。我想这是 Boost 如何管理对指针的访问的问题,因为如果我使用常规迭代器进行等效处理:

std::vector<node*>::iterator it;
std::vector<node*>::iterator et = vector_of_nodes.end();

for (it = vector_of_nodes.begin(); it != et; ++it){
if ((*it)->get_id() < 100)){
(*it) = new node(last_id++);
(*it)->add_related_node(other_node);
dfg->add_node(*it);
}
}

代码运行良好,并且按预期运行。

我可以改用那个版本,但我很好奇...为什么第一个版本不起作用?

最佳答案

将代码更改为

BOOST_FOREACH(node*& n, vector_of_nodes){
if (n->get_id() < 100)){
n = new node(last_id++);
n->add_related_node(other_node);
dfg->add_node(n);
}
}

因为在您的版本中您更改了本地指针的地址。而且,在你使用 n = new node 之前,你为什么不删除旧的?既然您在手动管理资源方面遇到问题,为什么不使用智能指针

关于c++ - 使用 BOOST_FOREACH 修改 std::vector 中的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15967290/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com