には多くの便利な関数がありますが<algorithm>
、それらはすべて「シーケンス」、つまりイテレータのペアで動作します。たとえば、コンテナがあり、そのstd::accumulate
上で実行したい場合、次のように書く必要があります。
std::vector<int> myContainer = ...;
int sum = std::accumulate(myContainer.begin(), myContainer.end(), 0);
私がやろうとしているのは:
int sum = std::accumulate(myContainer, 0);
私の目では、これはもう少し読みやすく、はっきりしています。
コンテナの一部のみを操作したい場合があるかもしれないので、範囲を渡すオプションがあることは間違いなく便利です。しかし、少なくとも私の経験では、それはまれな特別なケースです。私は通常、コンテナ全体を操作したいと思うでしょう。
これは、コンテナとのコールを取るラッパー関数書くのは簡単だbegin()
し、end()
その上に、このような便利な機能が標準ライブラリに含まれていません。
このSTL設計の選択の背後にある理由を知りたい。
boost::accumulate