Rangeアルゴリズム関数に対するReverseアダプタ
boost.range。
#include<boost/range/algorithm.hpp> #include<numeric> #include<vector> int main() { std::vector<int> v(10); std::iota(std::rbegin(v),std::rend(v),0); boost::sort(v); }
STLが各要素に重きを置いた設計であるのに対して、Boost.rangeは、rangeを1単位として考え重きを置いた設計であると言える。しかし、reverse iteratorを用いた時のような挙動を指定する事ができないのでは?とも思ったが、アダプタを用いる事で可能であった。
#include<boost/range/algorithm.hpp> #include<boost/range/algorithm_ext/iota.hpp> #include<boost/range/adaptors.hpp> #include<vector> int main() { std::vector<int> v(10); boost::iota(v|boost::adaptors::reversed,0); boost::sort(v); }
boostのドキュメントを眺めていて初めて知った。....これは、たまらん。