我一直在比较multimap::erase
功能的文档。在查看Josuttis和cplusplus.com之后,看起来好像有三个重载:
void erase(iterator position);
size_type erase(const key_type& x);
void erase(iterator first, iterator last);
但是,MSDN documentaion似乎表明三种略有不同的重载:
iterator erase(iterator where);
iterator erase(iterator first, iterator last);
bool erase(key_type key)
为什么会有这些差异?我只是有点慢,看错了文档,或者标准已经移动了,我只是看着过时的文档?
答案 0 :(得分:2)
正确的重载是(来自http://en.cppreference.com/w/cpp/container/multimap/erase):
void erase( iterator position ); (until C++11)
iterator erase( const_iterator position ); (since C++11)
void erase( iterator first, iterator last ); (until C++11)
iterator erase( const_iterator first, const_iterator last ); (since C++11)
size_type erase( const key_type& key );
cplusplus.com文档已过期; Microsoft文档完全不正确(可能会错误地从map
文档中复制重载);稍后会说第三种形式会返回已移除元素数量的计数,因此显然无法返回bool
。
答案 1 :(得分:2)
根据this,它实际上取决于您的STL符合的标准版本。 您在MSDN上阅读的内容是C ++ 11,而在cplusplus.com上,它适用于较旧的C ++。
答案 2 :(得分:2)
来自MSDN的链接似乎记录了一个包装STL以便在CLR中使用的库。第一个代码片段是正确的,与C ++ 03标准中的代码片段相同,只是iterators
中的C ++ 11标准不同const
。来自C ++ 11标准的 23.4.5.1类模板多图概述部分:
iterator erase(const_iterator position);
size_type erase(const key_type& x);
iterator erase(const_iterator first, const_iterator last);
答案 3 :(得分:1)
您链接到的MSDN文档是STL/CLR
版本。这是标准C ++库的一个子集,用于C ++和.NET Framework公共语言运行库(CLR)。
std::multimap::erase
的正确MSDN C ++文档是here。