在 C 03 中,删除映射中的元素会使指向该元素的迭代器无效。然而,在 C 11 及更高版本中,擦除方法返回下一个迭代器,从而允许在删除元素后进行安全迭代。
在 C 中03,为了确保从映射中删除元素后的安全迭代,请更新代码以使用 map::erase() 返回的迭代器并执行后增量调用erase()后的迭代器。
map<string serialdmsg::serialfunction_t>::iterator pm_it = port_map.begin();<br>while(pm_it != port_map.end())<br>{<pre class="brush:php;toolbar:false">if (pm_it->second == delete_this_id) { port_map.erase(pm_it++); // Use iterator. // Note the post increment. // Increments the iterator but returns the // original value for use by erase } else { ++pm_it; // Can use pre-increment in this case // To make sure you have the efficient version }
}
在 C 11 及更高版本中,erase() 返回下一个迭代器,使其安全使用以下语法同时迭代和删除元素:
<br>auto pm_it = port_map.begin();<br>while(pm_it != port_map.end())<br>{<pre class="brush:php;toolbar:false">if (pm_it->second == delete_this_id) { pm_it = port_map.erase(pm_it); } else { ++pm_it; }
}
以上是在 C 迭代过程中删除映射元素时会发生什么?的详细内容。更多信息请关注PHP中文网其他相关文章!