【发布时间】:2013-04-12 09:08:31
【问题描述】:
我有一个班级node 并声明了一个std::vector<node*>。我想使用 BOOST_FOREACH 来迭代向量,但我遇到了一个小问题。
我的代码是这样的:
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);
}
}
代码运行良好,按预期运行。
我可以改用那个版本,但我很好奇……为什么第一个版本不起作用?
【问题讨论】:
-
也许你可以使用placement
new?
标签: c++ boost boost-iterators