すぐ忘れるのでメモ。
<boost/detail/algorithm.hpp>には、is_sorted、iotaといったC++0xで導入されるアルゴリズムや
いくつかの範囲アルゴリズムが定義されています。
#include <vector> #include <boost/detail/algorithm.hpp> // is_sorted, sort #include <boost/assert.hpp> #include <pstade/oven/initial_values.hpp> #include <pstade/oven/equals.hpp> namespace oven = pstade::oven; int main() { std::vector<int> v = oven::initial_values(3, 1, 2); BOOST_ASSERT(!boost::is_sorted(v)); boost::sort(v); BOOST_ASSERT(boost::is_sorted(v)); BOOST_ASSERT(oven::equals(v, oven::initial_values(1, 2, 3))); }
以下は定義されているアルゴリズムの一覧。
namespace boost { // 連続した値の生成 template <class ForwardIterator, class T> void iota(ForwardIterator first, ForwardIterator last, T value); template <typename Container, typename T> void iota(Container& c, const T& value); // std::copyの範囲版 template <typename Container, typename OutIter> OutIter copy(const Container& c, OutIter result); // std::equalの範囲版(サイズチェックあり) template <typename Container1, typename Container2> bool equal(const Container1& c1, const Container2& c2); // std::sortの範囲版 template <typename Container> void sort(Container& c); template <typename Container, typename Predicate> void sort(Container& c, const Predicate& p); // std::stable_sortの範囲版 template <typename Container> void stable_sort(Container& c); template <typename Container, typename Predicate> void stable_sort(Container& c, const Predicate& p); // std::find_ifのboolを返す版 template <typename InputIterator, typename Predicate> bool any_if(InputIterator first, InputIterator last, Predicate p); template <typename Container, typename Predicate> bool any_if(const Container& c, Predicate p); // std::findのboolを返す版 template <typename InputIterator, typename T> bool container_contains(InputIterator first, InputIterator last, T value); template <typename Container, typename T> bool container_contains(const Container& c, const T& value); // std::countの範囲版 template <typename Container, typename T> std::size_t count(const Container& c, const T& value); // std::count_ifの範囲版 template <typename Container, typename Predicate> std::size_t count_if(const Container& c, Predicate p); // 範囲がソート済みかどうかを判定 template <typename ForwardIterator> bool is_sorted(ForwardIterator first, ForwardIterator last); template <typename ForwardIterator, typename StrictWeakOrdering> bool is_sorted(ForwardIterator first, ForwardIterator last, StrictWeakOrdering comp); template <typename Container> bool is_sorted(const Container& c); template <typename Container, typename StrictWeakOrdering> bool is_sorted(const Container& c, StrictWeakOrdering comp); } // namespace boost
detailにあるので使用する場合は自己責任で。