我正在阅读Nico的 The C ++ Standard Library 2nd edition 一书。他在第343页向我展示了erase()
map
函数的示例:
std:map<std::string, float> coll;
// ...
for (auto pos = coll.begin(); pos != coll.end(); ) {
if (pos->second == value) {
pos = coll.erase(pos); // since C++ 11
// C++ 98
// coll.erase(pos++);
} else {
++pos;
}
}
void erase( iterator position ); // C++ 98
iterator erase( const_iterator position ); // C++ 11
我的问题是重载决策如何在上一个示例中选择C ++ 11版本返回最后删除元素的迭代器?示例中pos
的类型为iterator
,不是吗?
答案 0 :(得分:1)
std::map<X>::iterator
被指定为可转换为std::map<X>::const_iterator
,因此您可以将前者传递给期望后者的函数。
过载分辨率不需要在这两个函数之间进行选择,因为它们是互斥的:C ++ 98在C ++ 11中不可用,反之亦然。
以下是C ++ 11中提供的std::map::erase
版本,来自N3337标准草案[map]/2
:
iterator erase(const_iterator position); size_type erase(const key_type& x); iterator erase(const_iterator first, const_iterator last);