如果地图擦除范围内的第一个和最后一个相等,则是否删除该元素
If first and last in a map erase range are equal will the element be removed or not?
根据这个:
迭代器指定要删除的映射容器中的范围: [第一,最后(。即,范围包括第一个之间的所有元素 最后,包括第一个指向的元素,但不包括第一个指向的元素 最后指出。
这是模棱两可的,因为它没有解决第一个和最后一个相等的情况。如果第一个和最后一个相等,该元素是否会被删除?这是相关代码的表示形式:
map<uint16_t, boost::shared_ptr<SPacket> >::iterator it = m_MyMap.find(ack);
if (it != m_MyMap.end()) m_MyMap.erase(m_MyMap.begin(), it);
如果第一个和最后一个相等,该元素是否会被删除?
当第一个和最后一个相等时,表示空白范围,不会擦除任何元素。std::vector::erase()
文档说明:
如果 first==last,则迭代器首先不需要可取消引用:擦除空范围是无操作。
std::map::erase()
的语义应该是相同的。
map<uint16_t, boost::shared_ptr<SPacket> >::iterator it = m_MyMap.find(ack);
if (it != m_MyMap.end()) m_MyMap.erase(m_MyMap.begin(), it);
代码意味着 - 从开始到it
擦除所有内容,但不包括it
如果it
等于m_MyMap.begin()
则不会擦除任何内容。
如果要包含键等于ack
的元素,则需要前进it
:
map<uint16_t, boost::shared_ptr<SPacket> >::iterator it = m_MyMap.find(ack);
if (it != m_MyMap.end()) m_MyMap.erase(m_MyMap.begin(), std::next(it));
相关文章:
- 是否删除在对象构造过程中创建的对象
- 擦除是否删除 stl 无序列图元素使用的堆内存
- 是否删除导致不明确过载的转换
- 打开模板参数:GCC 是否删除开关
- 如果地图擦除范围内的第一个和最后一个相等,则是否删除该元素
- C++是否删除显式对象
- 用错误的标志顺序编译后,是否删除*.cpp文件
- 是否删除非模板类析构函数中的模板类指针
- 是否删除整数的符号扩展
- 如何判断是否删除从函数返回的指针
- 非常简单的C ++:在 fstream 中>>运算符在读取某些内容后是否删除换行符?
- 类内成员初始化是否删除赋值运算符
- STL 容器调用的 Clear() 方法是否删除堆对象
- 提取运算符是否删除分隔符
- 分配动态数组时,是否删除了前面的元素
- STL矢量:当矢量容量因插入而增加时,在分配新的连续内存后,是否删除或保留旧的连续内存
- 编译器是否删除模板中类型的条件语句
- 使用条带是否删除二进制文件上的RTTI信息
- 复制/加载后是否删除
- (Pop in Array Based Stack)是否删除元素?