我正在写一个节点寻路算法。我需要运行一个多图并在某些条件下从中删除元素,但要继续遍历多图。下面是我到目前为止的代码,它似乎大部分时间都可以工作,但是在执行 nct_it++ 时偶尔会出错。在递增迭代器之前从表中擦除迭代器指针是否安全?
std::list<SinkSourceNodeConn>::iterator it;
std::multimap<SysNode*, SysNode*>::iterator nct_it;
SysNode* found_node = NULL;
nct_it = node_conn_table.begin();
while(nct_it != node_conn_table.end()) {
// Find the node in the ever shrinking node connection table...
if(nct_it->first == parent_node)
found_node = nct_it->second;
// Remove the table entry if we have found a node
if(found_node) {
// Search for the node in the expanded list. If it's not found, add it.
bool found_the_node = false;
for(it = m_sink_source_nodes_.begin(); it != m_sink_source_nodes_.end(); it++) {
if(it->sink_source == sink_source && it->node == found_node)
found_the_node = true;
}
if(!found_the_node) {
recursion_list.push_back(found_node);
recursion_list.unique();
SinkSourceNodeConn ssnc;
ssnc.node = found_node;
ssnc.sink_source = sink_source;
m_sink_source_nodes_.push_back(ssnc);
if(found_node->GetPotential() < sink_source->GetPotential())
found_node->SetPotential(sink_source->GetPotential());
}
found_node = NULL; // Unset the found node...
node_conn_table.erase(nct_it);
nct_it++;
} else
nct_it++;
}