首页 >后端开发 >C++ >当您在 C 迭代过程中删除映射元素时会发生什么?

当您在 C 迭代过程中删除映射元素时会发生什么?

Linda Hamilton
Linda Hamilton原创
2024-12-15 16:02:11992浏览

What Happens When You Erase a Map Element During Iteration in C  ?

如果在从 Begin 到 End 迭代时对映射元素调用擦除(),会发生什么?

迭代在 C 中的 map 中,考虑迭代时擦除元素的行为非常重要。如果处理不当,此操作可能会导致意外结果。

C 11

在 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 中,从地图中删除元素迭代可能会导致迭代器无效。为了避免这个问题,您应该使用在擦除()操作之外递增的循环变量来迭代映射。

以下代码演示了在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn