問題タブ [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.

0 投票する
2 に答える
2291 参照

c++ - std :: Advanceは、イテレータタイプの動作を変更するためにどのように実装されていますか?

私たちが知っていることstd::advanceは次のとおりです。

目的

イテレータin要素ごとに進めます。

iがランダムアクセスイテレータの場合、関数は1回またはoperator+を使用します。それ以外の場合、関数は要素が進むまでoperator-増加または減少演算子(operator++またはoperator--)を繰り返し使用します。n


私の質問は次のとおりです。ランダムアクセスイテレータであるかstd::advanceどうかを認識するように、どのように実装されますか?代わりにit使用できることをどうやって知るのですか?operator+operator++

0 投票する
1 に答える
726 参照

c++ - 負の数による std::multimap end() イテレータの std::advance がクラッシュする

この操作でアプリがクラッシュしました:

クラッシュのメッセージは次のとおりです。

何が問題ですか?

-(mm.size() - 7)編集:クラッシュしなかった代わりに-1だけを書いたとき、なぜですか? mm.size() をデバッグするときは 8 であることを考慮してください。

EDIT 2:私が書くとき、std::advance(it, -(static_cast<int>(scoresMap.size()) - 7));それは動作します。マルチマップのサイズタイプが原因ですが、何が原因かはまだ推測できません。

0 投票する
4 に答える
293 参照

c++ - C++ - カスタム テンプレート データ コンテナーのイテレーターで、advance() を使用して ADL を有効にする方法は?

コンテナは次のとおりです。

ADL (Argument-dependent lookup) 経由でadvance(InputIt &, Distance N)使用できるようにするには、上記のどこで定義しますか。advance()main()

そして、advance()代わりにカスタム関数を選択しましたstd::advanceか? カスタムadvance()関数が iterator クラス内で定義されている例と、それが名前空間内で定義され、友情のみが iterator クラス内で宣言されている例を見てきました。ADLの使用を可能にするために正しいのはどれですか? SO に関する他の例は、この点で明確ではありませんでした。

0 投票する
1 に答える
575 参照

c++ - ループ内のイテレータを進める

これがうまく機能する理由はありますか

そして、これは私に何も返さないのですか?(前進(それ,2))

いくつかの要素を飛び越える必要があるループを作成したい...、以下はit++、it++、およびit+=2のいずれかで機能しません。