C++ 如果贴图擦除范围中的第一个和最后一个相等,是否删除元素?
根据: 迭代器指定要删除的映射容器中的范围: [第一个,最后一个)。即,范围包括第一个和第二个之间的所有元素 最后,包括第一个指向的元素,但不包括第一个指向的元素 由最后一位指出 这是不明确的,因为它没有处理first和last相等的情况。如果first和last相等,元素是否会被删除?这是所讨论代码的表示:C++ 如果贴图擦除范围中的第一个和最后一个相等,是否删除元素?,c++,dictionary,range,erase,C++,Dictionary,Range,Erase,根据: 迭代器指定要删除的映射容器中的范围: [第一个,最后一个)。即,范围包括第一个和第二个之间的所有元素 最后,包括第一个指向的元素,但不包括第一个指向的元素 由最后一位指出 这是不明确的,因为它没有处理first和last相等的情况。如果first和last相等,元素是否会被删除?这是所讨论代码的表示: map<uint16_t, boost::shared_ptr<SPacket> >::iterator it = m_MyMap.find(ack); if (i
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=m_MyMap.find(ack);
如果(it!=m_MyMap.end())m_MyMap.erase(m_MyMap.begin(),it);
如果第一个和最后一个相等,是否删除该元素
当第一个和最后一个相等时,表示空范围,并且不会擦除任何元素。这是为std::vector::erase()
:
如果first==last,则迭代器first不需要是可取消引用的:删除空范围是不可操作的
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);
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));