問題タブ [iterator]
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# - C# の yield ステートメントを実装するためのアルゴリズム
私は自分でそれを理解したいと思っていますが、yieldステートメントを含む関数を列挙子のステートマシンに変換するアルゴリズムは何ですか? たとえば、C# では次のようになります。
これに:
もちろん、元のコードによって結果はまったく異なる可能性があります。
c++ - イテレータを使用してベクトルへのインデックスを取得する
ベクトルの要素を反復処理するときは、インデックスの代わりに反復子を使用することをお勧めします (配列インデックスの代わりに反復子を使用する理由を参照してください)。
ただし、ループの本体でインデックスを使用する必要がある場合があります。その場合、パフォーマンスと柔軟性/拡張性を考慮して、次のうちどれが望ましいでしょうか?
- インデックス付きループに戻る/li>
- オフセットを計算する/li>
- std::distance を使用する/li>
c++ - std::list の splice() とイテレータの無効化
の 3 引数形式はlist::splice()
、1 つの要素を 1 つのリストから別のリストに移動します。 SGI のドキュメントには、移動中の要素を指すものを含め、すべての反復子が有効なままであると明示的に記載されています。 Roguewave のドキュメントには、メソッドのイテレータ無効化プロパティについては何も記載されていませんsplice()
が、C++ 標準では、すべてのイテレータと結合される要素への参照を無効にすることが明示的に述べられています。
splicing() は実際には SGI の定義どおりに動作しますが、Microsoft の STL 実装 (標準の文字に厳密に従う) のデバッグ / セキュア SCL バージョンでアサーション エラー (無効なイテレータの逆参照) が発生します。
今、リストを使用しているのは、それを指している反復子の有効性を維持しながら、リスト間で要素を移動したいからです。この標準は、元の SGI の仕様に対して非常に役に立たない変更を加えました。
この問題を回避するにはどうすればよいですか? または、実用的で頭を砂に突き刺す必要があります(スプライシングは実際にはイテレーターを無効にしないためです-イテレーターのデバッグがオフになると、MSの実装でもそうではありません)。
c++ - 独自のイテレータを作成する
私は C++ を学ぼうとしているので、この質問が基本的な知識の欠如を示している場合はご容赦ください。実際、私には基本的な知識が不足しています。
私が作成したクラスのイテレータを作成する方法を理解する手助けが必要です。
ポイントのコンテナを持つ「Shape」クラスがあります。Shape を参照し、Shape の位置を定義するクラス「Piece」があります。ピースには形状がなく、形状を参照しているだけです。
ピースは、それが参照するシェイプと同じポイントのコンテナですが、ピースの位置のオフセットが追加されているように見せたいです。
Piece がコンテナそのものであるかのように、Piece の Points を繰り返し処理できるようにしたいと考えています。私は少し読んだことがありますが、私を助けてくれるものは何も見つかりませんでした。任意のポインタに非常に感謝します。
c++ - std :: map上のループの最後の反復を検出するにはどうすればよいですか?
次のようなことを行うために、マップ上のループの最後の反復にいるかどうかを判断するための最良の方法を見つけようとしています。
これを行うにはいくつかの方法があるようです:ランダムアクセスイテレータ、distance
関数など。正規の方法は何ですか?
編集:マップのランダムアクセスイテレータはありません!
c++ - 使用するコンテナを公開せずにイテレータを公開するにはどうすればよいですか?
私はしばらくの間C#を使用していますが、C++に戻るのは頭痛の種です。私は自分のプラクティスのいくつかをC#からC ++に移行しようとしていますが、抵抗を感じているので、あなたの助けを喜んで受け入れます。
次のようなクラスのイテレータを公開したいと思います。
問題ないことをやっていますか?typedef std :: vector <T> :: iteratorだけでいいですか?実装コンテナではなく、イテレータに依存することを望んでいます...
c++ - 引数として使用する場合、内部でイテレータを増やしても安全ですか?
現在、一連のイテレータをセットから消去しようとしていますが、std::set::erase(iterator) はイテレータ (次のイテレータ) を返す必要があるため、GCC の標準ライブラリは壊れているようですが、GCC では void を返します(どれが標準?)
とにかく私は書きたい:
しかし、GCCはそれを好まない...では、代わりにこれを書いても安全ですか?
編集:はい、私は mySet.end(); に対してチェックしています。
c++ - 既存の配列のSTL非コピーラッパー?
POD 型の要素の既存の配列に対して、STL のようなコンテナー、または単に STL スタイルのイテレーターを作成することは可能ですか?
たとえば、int の配列があるとします。この配列に対して、find_if、count_if、または sort などの STL 関数を直接呼び出せると便利です。
非解決策: 配列全体をコピーするか、要素への参照だけをコピーします。目標は、メモリと時間を大幅に節約しながら、できれば他の STL アルゴリズムを使用できるようにすることです。
c++ - イテレータ..なぜそれらを使用するのですか?
STL ライブラリでは、いくつかのコンテナーにイテレーターがあり、単純な for ループよりも、これらのコンテナーを反復処理する優れた方法であると一般的に考えられています。
なぜ、どのような場合にイテレータを使用する必要があるのか 、どのような場合に上記のコードスニペットを教えてもらえますか?
c++ - STL リストを逆方向に反復するにはどうすればよいですか?
Windows と Mac の間でクロスプラットフォームのコードを書いています。
list::end() が「リストの最後の要素に続く位置をアドレス指定する反復子を返し」、リストを順方向にトラバースするときにチェックできる場合、逆方向にトラバースする最良の方法は何ですか?
このコードは Mac では機能しますが、Windows では機能しません (最初の要素を超えて減少することはできません)。
これは Windows で動作します:
forループで実装できる逆方向にトラバースする別の方法はありますか?