18

STL リファレンスは、以下の間に概念的な違いを生むようです:

  • 一方では「シーケンス コンテナー」(配列ベクトル deque forward_list リスト)
  • 一方、「連想コンテナー」 (マルチセット マップ マルチマップ unordered_set unordered_multiset unordered_map unordered_multimap を設定)。

また、次のように思われます。

  • begin()コンテナ内の最初の要素を指す反復子を返すメソッドを実装するすべてのコンテナ。
  • front()コンテナ内の最初の要素への参照を返すメソッドを持つシーケンスコンテナのみ。

私の理解では、メソッドは、その戻り値を逆参照するだけfront()で、メソッドの観点から簡単に定義できるということです。begin()

したがって、私の質問は、メソッドを定義するすべてのオブジェクトに対してメソッドが定義されていないのはなぜですか? front()begin()(これは実際にはすべてのコンテナである必要があります)

(セマンティックの観点からは、マップから最初の要素を取得することは、ベクトルから最初の要素を取得する場合ほど意味がないと思いますが、より有効な説明があるかどうか疑問に思っていました)。

4

5 に答える 5

0

そうです、それは非常に簡単に実装できます。しかし問題は、これらのコンテナは特定の用途向けに設計されているということです。メンバーを持つことは、コンテナーの目的front()が明示的な順序を持つことであることを意味します。もちろん、値は順序付けされていますが、それはパフォーマンスの問題です。そしてもちろん、内部構造はどこかで ( を提供するために) 開始する必要がありますが、またはを提供しても意味がない場合があります。mapbegin()front()back()

イテレータはデータをトラバースするためのものであり、front()メンバーは明示的に順序付けられたコレクションの最初の要素にアクセスするためのものです。マップは連想的であるため、マップの最初のメンバーにアクセスしても意味がありません。

于 2013-06-07T11:39:52.377 に答える
-2

STL は、反復子を使用してトラバースするように設計されています。したがって、 とfront()のようなコンテナに対してのみ意味があると思います。listdeque

于 2013-06-07T10:22:12.343 に答える