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

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

c++ - boost transform() の後にネストされたイテレータを比較する

これを VS2015 で実行すると_ITERATOR_DEBUG_LEVEL=2、次のエラーが発生します_Compat(const _Myiter& _Right)

フラット化反復子は でこの比較を使用するため、これは重要ですadvance_past_empty_inner_containers()

どうしたの?どうすれば修正できますか?

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

c++ - 「アルゴリズムを使用します。多段階ロジックのコードを書かないでください。

この質問は、「明示的なループをまったく使用しないでください!」と考えさせられます。adjacent_differenceSTL/Boost アルゴリズムを使用する」ですが、詳しく見ると、 がありaccumulate、Boost がzipどこかにあることに注意してください。

それらは単にスタックすることはありませんが、それぞれが単独でパス全体を作成することしかできません。そのため、単純な方法でそれらを使用すると、部分的な結果を含む多数の中間コピーが必要になります。つまり、adgient_difference に、zip などの引数である新しいベクトルを書き込んでもらいます。

「最新の」C++ では、「コードを書く」べきではなく、明示的なループをめったに必要としないというのがマントラです。

しかし、私の実世界での経験は、このケースに似ています。実行することは単純なステップではなく、結果はそのようなバッチに収集されません。

では、実行する操作を参照しながら、範囲をループせず、各要素を明示的にプルせずに、合理化された方法でこれを記述するにはどうすればよいでしょうか。

ブースト イテレータ フィルタ、一般に、駆動ループ内で終了するより複雑なロジックを構築できます (したがって、中間結果の全体コピーはありません) が、この例には、ブースト範囲フィルタで何が制限されているかを示すいくつかの機能があります。forそして、それを設定することは、単にループを書くよりも複雑です!

では、C++ の「誰が誰だ」が、新しい言語とライブラリ機能を使用してそのように記述できるはずだと言っている場合、ここでどのようにそれを行うのでしょうか。