0

我一直在比较multimap::erase函数的文档。查看 Josuttis 和cplusplus.com后,看起来好像存在三个重载:

void erase(iterator position);
size_type erase(const key_type& x);
void erase(iterator first, iterator last);

但是,MSDN 文档似乎提出了三种略有不同的重载:

iterator erase(iterator where);
iterator erase(iterator first, iterator last);
bool erase(key_type key)

为什么会有差异?我只是有点慢并查看了错误的文档,还是标准已经移动而我只是查看过时的文档?

4

4 回答 4

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

于 2012-07-03T11:56:23.157 回答
2

据此,实际上取决于您的 STL 符合的标准版本。您在 MSDN 上读到的是 C++ 11,而在 cplusplus.com 上读到的是旧版 C++。

于 2012-07-03T11:57:04.887 回答
2

来自 MSDN 的链接似乎记录了一个包装 STL 以在 CLR 中使用的库。第一个代码片段是正确的,与 C++03 标准中的相同,仅与 are 中的 C++11 标准iterators不同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);
于 2012-07-03T11:57:10.527 回答
1

您链接到的 MSDN 文档是STL/CLR版本。这是用于 C++ 和 .NET Framework 公共语言运行时 (CLR) 的标准 C++ 库的子集。

正确的 MSDN C++ 文档std::multimap::erase这里

于 2012-07-03T11:58:46.727 回答