この質問は、「明示的なループをまったく使用しないでください!」と考えさせられます。adjacent_difference
STL/Boost アルゴリズムを使用する」ですが、詳しく見ると、 がありaccumulate
、Boost がzip
どこかにあることに注意してください。
while (i<l-1){
ans = ans + max(abs(X[i]-X[i+1]), abs(Y[i]-Y[i+1]));
i++;
}
それらは単にスタックすることはありませんが、それぞれが単独でパス全体を作成することしかできません。そのため、単純な方法でそれらを使用すると、部分的な結果を含む多数の中間コピーが必要になります。つまり、adgient_difference に、zip などの引数である新しいベクトルを書き込んでもらいます。
「最新の」C++ では、「コードを書く」べきではなく、明示的なループをめったに必要としないというのがマントラです。
しかし、私の実世界での経験は、このケースに似ています。実行することは単純なステップではなく、結果はそのようなバッチに収集されません。
では、実行する操作を参照しながら、範囲をループせず、各要素を明示的にプルせずに、合理化された方法でこれを記述するにはどうすればよいでしょうか。
ブースト イテレータ フィルタは、一般に、駆動ループ内で終了するより複雑なロジックを構築できます (したがって、中間結果の全体コピーはありません) が、この例には、ブースト範囲フィルタで何が制限されているかを示すいくつかの機能があります。for
そして、それを設定することは、単にループを書くよりも複雑です!
では、C++ の「誰が誰だ」が、新しい言語とライブラリ機能を使用してそのように記述できるはずだと言っている場合、ここでどのようにそれを行うのでしょうか。