これについて適切なソースを見つけることができませんでした。 <algorithm>
ヘッダー内のすべてのアルゴリズムは、イテレータをインクリメント(場合によってはデクリメント)するためにstd::advance
を使用しますか?C++の標準ライブラリアルゴリズムはstd :: advanceを使用しますか?
また別の関連するフォローアップ - RandomAccessIteratorコンセプト(http://en.cppreference.com/w/cpp/concept/RandomAccessIterator)のcppreferenceページを見ましたが、イテレータカテゴリのメンバエイリアスを持つ必要はありません。イテレータクラスにというメンバ型のtypedefがなく、random_access_iterator_tag
にエイリアスされていますが、RandomAccessIteratorのcppreferenceページ(http://en.cppreference.com/w/cpp/concept/RandomAccessIterator)に記載されている操作をサポートしている場合、C++標準ライブラリはイテレータがランダムアクセスイテレータであると見なしますか?
注私はこの問題について、C++標準を参照して質問するつもりでした。すなわち、「これについて標準が何を言っているのか」
イテレータを1以上進めなければならないアルゴリズムはありません。頭に浮かぶアルゴリズムは通常、イテレータをインクリメントまたはデクリメントするので、 '++'と '--'。おそらく、並べ替えとシャッフルを除いて。しかし、いずれの場合でも、ヘッダーファイル自体を検索することで簡単に答えを判断できます。あなた自身でこれを理解することができるはずです。 –
@SamVarshavchik私は標準からの可能な見積もりを探してこの質問をしました。実装を見ることは、標準を維持しながら変更することができるため、十分ではありません。また、頻繁に使用される 'std :: upper_bound'と' std :: lower_bound'は、ほとんどの実装で 'n'ステップでイテレータを進めるために' std :: advance'を使用します – Curious
私はセクション25、 "アルゴリズムとしょうかん"。最初の段階では 'advance()'の記述は1つしかありませんが、このセクションの仕様で 'a + n 'への参照は非ランダムアクセスイテレータに適用されたときに" as '' advance() 'が使われた場合私はこれが実際に 'advance()'を必要としていると主張する準備はできていません。 advance()が使用されているかのように「状態」が示されます。それは明らかに* 'advance()'を禁止しませんが、IMOを必要としません。私はこれに 'language-lawyer'タグを追加します。 –