multimap :: erase()标准行为?

时间:2012-07-03 11:47:28

标签: c++ iterator std multimap

我一直在比较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)

为什么会有这些差异?我只是有点慢,看错了文档,或者标准已经移动了,我只是看着过时的文档?

4 个答案:

答案 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