클래스가 node
이고 std::vector<node*>
으로 선언되었습니다. 벡터를 반복하는 데 BOOST_FOREACH를 사용하고 싶지만 조금 문제가 있습니다.BOOST_FOREACH를 사용하여 std :: 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
의 포인터가 변경되지 않는다는 것입니다.
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);
}
}
에
[placement'new'] (http://en.wikipedia.org/wiki/Placement_syntax)를 사용할 수 있습니까? –