迭代在 C 中的 map 中,考虑迭代时擦除元素的行为非常重要。如果处理不当,此操作可能会导致意外结果。
在 C 11 中,erase() 方法已得到改进,现在是一致的涵盖所有容器类型。当删除一个元素时,erase() 方法返回下一个迭代器。这允许您继续迭代映射而不会遇到任何问题。
以下代码演示了在 C 11 中迭代时从映射中删除元素的正确方法:
auto pm_it = port_map.begin(); while (pm_it != port_map.end()) { if (pm_it->second == delete_this_id) { pm_it = port_map.erase(pm_it); } else { ++pm_it; } }
在 C 03 中,从地图中删除元素迭代可能会导致迭代器无效。为了避免这个问题,您应该使用在擦除()操作之外递增的循环变量来迭代映射。
以下代码演示了在 C 03 中迭代时从映射中删除元素的正确方法:
map<string, SerialdMsg::SerialFunction_t>::iterator pm_it = port_map.begin(); while (pm_it != port_map.end()) { 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 迭代过程中删除映射元素时会发生什么?的详细内容。更多信息请关注PHP中文网其他相关文章!