問題タブ [for-range]
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++の範囲ベースのforループ
C ++ 11で使用可能な「foreach」スタイルの構文では、配列の実際のサイズ(要素の数)を知らなくても配列の反復が可能であるように思われます。これは新しい標準の一部であるため、Cアレイの場合でも完全に安全であると思います。通常、C配列を操作する前に、C配列のサイズも個別に知っておく必要がありますが、この新しいC ++手法の経験者から、期待どおりに機能することを確認してください。
このテクニックの明らかでない副作用や不利な点について知っておくべきことはありますか?私が見るコードではあまり表示されません。おそらく、これが標準になる前にほとんどのコードが作成されたためです。よく知られていない他の理由が原因で、そのまれな使用法がないことを確認したい。
loops - 順番にマップする範囲ループ
順序どおりに範囲を広げる決定的な方法を探していますGo
map
。
Golangの仕様には次のように記載されています。
マップの反復順序は指定されておらず、反復ごとに同じであるとは限りません。まだ達していないマップ エントリが反復中に削除されると、対応する反復値は生成されません。反復中にマップ エントリが作成された場合、そのエントリは反復中に生成されるか、スキップされる可能性があります。選択は、作成されたエントリごとに、また反復ごとに異なる場合があります。マップが nil の場合、反復回数は 0 です。
ここで StackOverflow と Google で見つけたのは、私が気に入らない( imho ) 回避策だけです。
マップを繰り返し処理し、挿入された順序でアイテムを取得する確実な方法はありますか?
私が見つけた解決策は次のとおりです。
キーと値を 2 つの別々のスライスで追跡します。これは、「マップを使用しない」ように聞こえ、マップを使用する利点がすべて失われます。
マップを使用しますが、別のスライスでキーを追跡します。これはデータの重複を意味し、データの不整合につながる可能性があり、最終的には大量のバグと面倒なデバッグをもたらす可能性があります。
何を指示してるんですか?
重複フラグの可能性に応じて編集します。
私の質問と提供された質問 (この質問だけでなく、この質問も)にはわずかな違いがあります。代わりに、私は具体的に尋ねました:
マップを反復処理し、挿入された順序でアイテムを取得する確実な方法はありますか?
@gramme.ninja
これは辞書式ではないため、質問とは異なります。
キーを順番に並べたり、マップを並べ替えたりして、キーが順番に並べられ、値が対応するようにするにはどうすればよいですか?
for-loop - ブーストのcounting_rangeには、最後の値の反復が含まれていません
私はこのコードを持っています:
次に、それぞれ0 ~ 6と1 ~ 12for
に設定したループに注意してください。0 ~ 7と1 ~ 13でなければならないことがわかりました。最後の番号まで反復しますが、最後の番号自体は含まれません!
したがって、これは誤解を招く可能性があります。
http://www.boost.org/doc/libs/1_63_0/libs/range/doc/html/range/reference/ranges/counting_range.html
確認してください。
c++ - 実行ポリシーを使用した範囲ベースのループまたは for_each の方が優れていますか?
cppreference.com で C++17 のこれらの新しい実行ポリシーについて読みました: https://en.cppreference.com/w/cpp/algorithm/execution_policy_tag_t
そして、コンパイラーがその可能性を最大限に最適化できるようにしたい場合、範囲ベースのループよりもそれらを優先する必要があるのではないかと考えていました。私はまだそれらを実装していないgccを使用しているので、テストすることはできませんが、将来的にはこれを好むべきです:
またはこれ: