古き良きイテレータと比較して、c++ 20 の範囲が追加するものを理解するのに苦労しています。begin
はい、もうandを使用する必要はないと思いますが、次のend
ような単純なオーバーロードがあります。
namespace std {
template <typename Container>
auto transform(Container&& container, auto&&... args) requires ( requires {container.begin(); container.end(); }) {
return transform(container.begin(), container.end(), args...);
}
}
その問題を解決します。
範囲が便利な理由と、イテレータと比較してどのような場合に使用する必要がありますか?
編集:範囲にはイテレータよりも他の利点があることを知っています(チェーン、より良いメソッドなど...)。しかし、これら (私が思うに?) はすべて反復子で行うことができ、範囲のようなまったく新しい概念を導入する必要があった理由がわかりません。