問題タブ [stdadvance]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - std :: Advanceは、イテレータタイプの動作を変更するためにどのように実装されていますか?
私たちが知っていることstd::advance
は次のとおりです。
目的
イテレータi
をn
要素ごとに進めます。
i
がランダムアクセスイテレータの場合、関数は1回またはoperator+
を使用します。それ以外の場合、関数は要素が進むまでoperator-
増加または減少演算子(operator++
またはoperator--
)を繰り返し使用します。n
私の質問は次のとおりです。ランダムアクセスイテレータであるかstd::advance
どうかを認識するように、どのように実装されますか?代わりにit
使用できることをどうやって知るのですか?operator+
operator++
c++ - 負の数による std::multimap end() イテレータの std::advance がクラッシュする
この操作でアプリがクラッシュしました:
クラッシュのメッセージは次のとおりです。
何が問題ですか?
-(mm.size() - 7)
編集:クラッシュしなかった代わりに-1だけを書いたとき、なぜですか? mm.size() をデバッグするときは 8 であることを考慮してください。
EDIT 2:私が書くとき、std::advance(it, -(static_cast<int>(scoresMap.size()) - 7));
それは動作します。マルチマップのサイズタイプが原因ですが、何が原因かはまだ推測できません。
c++ - C++ - カスタム テンプレート データ コンテナーのイテレーターで、advance() を使用して ADL を有効にする方法は?
コンテナは次のとおりです。
ADL (Argument-dependent lookup) 経由でadvance(InputIt &, Distance N)
使用できるようにするには、上記のどこで定義しますか。advance()
main()
そして、advance()
代わりにカスタム関数を選択しましたstd::advance
か? カスタムadvance()
関数が iterator クラス内で定義されている例と、それが名前空間内で定義され、友情のみが iterator クラス内で宣言されている例を見てきました。ADLの使用を可能にするために正しいのはどれですか? SO に関する他の例は、この点で明確ではありませんでした。
c++ - ループ内のイテレータを進める
これがうまく機能する理由はありますか
そして、これは私に何も返さないのですか?(前進(それ,2))
いくつかの要素を飛び越える必要があるループを作成したい...、以下はit++、it++、およびit+=2のいずれかで機能しません。