0

multimap::erase関数のドキュメントを比較してきました。Josuttisとcplusplus.comをチェックした後、3つのオーバーロードがあるように見えます。

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

ただし、MSDNのドキュメントでは、わずかに異なる3つのオーバーロードが示唆されているようです。

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ます)。後で、3番目の形式は削除された要素の数のカウントを返すため、明らかに返すことができないと言いますbool

于 2012-07-03T11:56:23.157 に答える
2

これによると、実際には、STLが準拠している標準のバージョンによって異なります。MSDNで読んだのはC++11で、cplusplus.comでは古いC++用です。

于 2012-07-03T11:57:04.887 に答える
2

MSDNからのリンクは、CLRで使用するためにSTLをラップするライブラリを文書化しているようです。最初のコードスニペットは正しく、C ++ 03標準のコードスニペットと同じであり、C++11標準との違いはiteratorsareだけconstです。セクション23.4.5.1からC++11標準のクラステンプレートマルチマップの概要:

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++および.NETFramework共通言語ランタイム(CLR)で使用するための標準C++ライブラリのサブセットです。

の正しいMSDNC++ドキュメントstd::multimap::eraseこちらです。

于 2012-07-03T11:58:46.727 に答える