※このコードは現在開発中のものです。
#include <iostream> #include <boost/detail/lightweight_test.hpp> #include <boost/range/algorithm/equal.hpp> #include <vector> #include <boost/assign/list_of.hpp> #include <boost/range/adaptor/regular_extension/filtered.hpp> #include <boost/range/adaptor/dropped.hpp> #include <boost/range/access/front.hpp> #include <boost/range/single.hpp> #include <boost/range/any_range.hpp> #include <boost/range/join.hpp> #include <boost/lambda/lambda.hpp> typedef boost::any_range<int, boost::forward_traversal_tag, int&, std::ptrdiff_t> range; using boost::lambda::_1; using namespace boost::adaptors; using boost::range::access::front; using boost::range::single; range quick_sort(range rng) { if (!rng) return rng; else { int& x = front(rng); range xs = rng|dropped(1); return boost::join( boost::join( quick_sort(xs |+ filtered(_1 < x)), single(x) ), quick_sort(xs |+ filtered(_1 >= x)) ); } } int main() { std::vector<int> v = boost::assign::list_of(3)(2)(5)(4)(6)(1); std::cout << quick_sort(range(v)) << std::endl; BOOST_TEST(boost::equal( quick_sort(range(v)), boost::assign::list_of(1)(2)(3)(4)(5)(6) )); return boost::report_errors(); }
123456