⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 algorithm.hpp

📁 CGAL is a collaborative effort of several sites in Europe and Israel. The goal is to make the most i
💻 HPP
📖 第 1 页 / 共 2 页
字号:
// -- algorithm.hpp -- Boost Lambda Library -----------------------------------// Copyright (C) 2002 Jaakko J鋜vi (jaakko.jarvi@cs.utu.fi)// Copyright (C) 2002 Gary Powell (gwpowell@hotmail.com)//// Distributed under the Boost Software License, Version 1.0. (See// accompanying file LICENSE_1_0.txt or copy at// http://www.boost.org/LICENSE_1_0.txt)//// For more information, see http://www.boost.org#ifndef BOOST_LAMBDA_ALGORITHM_HPP#define BOOST_LAMBDA_ALGORITHM_HPP#include "boost/lambda/core.hpp"#include <algorithm>#include <iterator>  // for iterator_traits#include <utility> // for std::pairnamespace boost {  namespace lambda {namespace ll {// for_each ---------------------------------struct for_each {    template <class Args>  struct sig {     typedef typename boost::remove_const<        typename boost::tuples::element<3, Args>::type      >::type type;   };  template <class A, class C>  C  operator()(A a, A b, C c) const  { return ::std::for_each(a, b, c); }};// find  ---------------------------------struct find {    template <class Args>  struct sig {     typedef typename boost::remove_const<        typename boost::tuples::element<1, Args>::type      >::type type;   };  template <class A, class C>  A  operator()(A a, A b, const C& c) const  { return ::std::find(a, b, c); }};// find_if  ---------------------------------struct find_if {    template <class Args>  struct sig {     typedef typename boost::remove_const<        typename boost::tuples::element<1, Args>::type      >::type type;   };  template <class A, class C>  A  operator()(A a, A b, C c) const  { return ::std::find_if(a, b, c); }};// find_end  ---------------------------------struct find_end {  template <class Args>  struct sig {     typedef typename boost::remove_const<        typename boost::tuples::element<1, Args>::type      >::type type;   };  template <class A, class C>  A  operator()(A a, A b, C c, C d) const  { return ::std::find_end(a, b, c, d); }  template <class A, class C, class E>  A  operator()(A a, A b, C c, C d, E e) const  { return ::std::find_end(a, b, c, d, e); }};// find_first_of  ---------------------------------struct find_first_of {  template <class Args>  struct sig {     typedef typename boost::remove_const<        typename boost::tuples::element<1, Args>::type      >::type type;   };  template <class A, class C>  A  operator()(A a, A b, C c, C d) const  { return ::std::find_first_of(a, b, c, d); }  template <class A, class C, class E>  A  operator()(A a, A b, C c, C d, E e) const  { return ::std::find_first_of(a, b, c, d, e); }};// adjacent_find  ---------------------------------struct adjacent_find {  template <class Args>  struct sig {     typedef typename boost::remove_const<        typename boost::tuples::element<1, Args>::type      >::type type;   };  template <class A>  A  operator()(A a, A b) const  { return ::std::adjacent_find(a, b); }  template <class A, class C>  A  operator()(A a, A b, C c) const  { return ::std::adjacent_find(a, b, c); }};// count  ---------------------------------struct count {  template <class Args>  struct sig {     typedef typename ::std::iterator_traits<      typename boost::remove_const<           typename boost::tuples::element<1, Args>::type      >::type     >::difference_type type;  };  template <class A, class C >  typename ::std::iterator_traits<A>::difference_type  operator()(A a, A b, const C& c) const  { return ::std::count(a, b, c); }};// count_if  ---------------------------------struct count_if {  template <class Args>  struct sig {     typedef typename ::std::iterator_traits<     typename boost::remove_const<           typename boost::tuples::element<1, Args>::type       >::type    >::difference_type type;  };  template <class A, class C >  typename ::std::iterator_traits<A>::difference_type  operator()(A a, A b, C c) const  { return ::std::count_if(a, b, c); }};// mismatch  ---------------------------------struct mismatch {  template <class Args>  struct sig {     typedef typename boost::remove_const<        typename boost::tuples::element<1, Args>::type     >::type element1_type;     typedef typename boost::remove_const<        typename boost::tuples::element<3, Args>::type     >::type element2_type;     typedef ::std::pair< element1_type, element2_type > type;   };  template <class A, class C >  ::std::pair<A,C>  operator()(A a, A b, C c) const  { return ::std::mismatch(a, b, c); }  template <class A, class C, class D>  ::std::pair<A,C>  operator()(A a, A b, C c, D d) const  { return ::std::mismatch(a, b, c, d); }};// equal  ---------------------------------struct equal {  template <class Args>  struct sig {     typedef bool type;  };  template <class A, class C >  bool  operator()(A a, A b, C c) const  { return ::std::equal(a, b, c); }  template <class A, class C, class D>  bool  operator()(A a, A b, C c, D d) const  { return ::std::equal(a, b, c, d); }};// search --------------------------------struct search {    template <class Args>  struct sig {     typedef typename boost::remove_const<        typename boost::tuples::element<1, Args>::type     >::type type;   };  template <class A, class C>  A  operator()(A a, A b, C c, C d) const  { return std::search(a, b, c, d);}  template <class A, class C, class E>  A  operator()(A a, A b, C c, C d, E e) const  { return std::search(a, b, c, d, e);}};// copy  ---------------------------------struct copy {  template <class Args>  struct sig {     typedef typename boost::remove_const<        typename boost::tuples::element<3, Args>::type      >::type type;   };  template <class A, class C>  C  operator()(A a, A b, C c) const  { return ::std::copy(a, b, c); }};// copy_backward  ---------------------------------struct copy_backward {  template <class Args>  struct sig {     typedef typename boost::remove_const<        typename boost::tuples::element<3, Args>::type      >::type type;   };  template <class A, class C>  C  operator()(A a, A b, C c) const  { return ::std::copy_backward(a, b, c); }};// swap  ---------------------------------struct swap {  template <class Args>  struct sig {     typedef void type;   };  template <class A>  void  operator()(A a, A b) const  { ::std::swap(a, b); }};// swap_ranges  ---------------------------------struct swap_ranges {  template <class Args>  struct sig {     typedef typename boost::remove_const<        typename boost::tuples::element<3, Args>::type      >::type type;   };  template <class A, class C>  C  operator()(A a, A b, C c) const  { return ::std::swap_ranges(a, b, c); }};// iter_swap  ---------------------------------struct iter_swap {  template <class Args>  struct sig {      typedef void type;   };  template <class A>  void   operator()(A a, A b) const  { ::std::iter_swap(a, b); }};// transform --------------------------------struct transform {    template <class Args>  struct sig {     typedef typename boost::remove_const<        typename boost::tuples::element<          boost::tuples::length<Args>::value - 2,           Args      >::type     >::type type;   };  template <class A, class C, class D>  C  operator()(A a, A b, C c, D d) const  { return std::transform(a, b, c, d);}  template <class A, class C, class D, class E>  D  operator()(A a, A b, C c, D d, E e) const  { return std::transform(a, b, c, d, e);}};// replace  ---------------------------------struct replace {  template <class Args>  struct sig {    typedef void type;  };  template <class A, class C>  void  operator()(A a, A b, const C& c, const C& d) const  { ::std::replace(a, b, c, d); }};// replace_if  ---------------------------------struct replace_if {  template <class Args>  struct sig {    typedef void type;  };  template <class A, class C, class D>  void  operator()(A a, A b, C c, const D& d) const  { ::std::replace_if(a, b, c, d); }};// replace_copy  ---------------------------------struct replace_copy { template <class Args>  struct sig {     typedef typename boost::remove_const<        typename boost::tuples::element<3, Args>::type      >::type type;   };  template <class A, class C, class D>  C  operator()(A a, A b, C c, const D& d, const D& e) const  { return ::std::replace_copy(a, b, c, d, e); }};// replace_copy_if  ---------------------------------struct replace_copy_if { template <class Args>  struct sig {     typedef typename boost::remove_const<        typename boost::tuples::element<3, Args>::type      >::type type;   };  template <class A, class C, class D, class E>  C  operator()(A a, A b, C c, D d, const E& e) const  { return ::std::replace_copy_if(a, b, c, d, e); }};// fill  ---------------------------------struct fill {  template <class Args>  struct sig {      typedef void type;   };  template <class A, class C>  void   operator()(A a, A b, const C& c) const  { ::std::fill(a, b, c); }};// fill_n  ---------------------------------struct fill_n {  template <class Args>  struct sig {      typedef void type;   };  template <class A, class B, class C>  void   operator()(A a, B b, const C& c) const  { ::std::fill_n(a, b, c); }};// generate  ---------------------------------struct generate {  template <class Args>  struct sig {      typedef void type;   };  template <class A, class C>  void   operator()(A a, A b, C c) const  { ::std::generate(a, b, c); }};// generate_n  ---------------------------------struct generate_n {  template <class Args>  struct sig {      typedef void type;   };  template <class A, class B, class C>  void   operator()(A a, B b, C c) const  { ::std::generate_n(a, b, c); }};// remove  ---------------------------------struct remove {  template <class Args>  struct sig {     typedef typename boost::remove_const<        typename boost::tuples::element<1, Args>::type      >::type type;   };  template <class A, class C >  A  operator()(A a, A b, const C& c) const  { return ::std::remove(a, b, c); }};// remove_if  ---------------------------------struct remove_if {  template <class Args>  struct sig {     typedef typename boost::remove_const<       typename boost::tuples::element<1, Args>::type     >::type type;   };  template <class A, class C >  A  operator()(A a, A b, C c) const  { return ::std::remove_if(a, b, c); }};// remove_copy  ---------------------------------struct remove_copy {  template <class Args>  struct sig {     typedef typename boost::remove_const<       typename boost::tuples::element<3, Args>::type     >::type type;   };  template <class A, class C, class D >  C  operator()(A a, A b, C c, const D& d) const  { return ::std::remove_copy(a, b, c, d); }};// remove_copy_if  ---------------------------------struct remove_copy_if {  template <class Args>  struct sig {     typedef typename boost::remove_const<       typename boost::tuples::element<3, Args>::type     >::type type;   };  template <class A, class C, class D >  C  operator()(A a, A b, C c, D d) const  { return ::std::remove_copy_if(a, b, c, d); }};// unique  ---------------------------------struct unique {  template <class Args>  struct sig {     typedef typename boost::remove_const<        typename boost::tuples::element<1, Args>::type      >::type type;   };  template <class A>  A  operator()(A a, A b) const  { return ::std::unique(a, b); }  template <class A, class C>  A  operator()(A a, A b, C c) const  { return ::std::unique(a, b, c); }};// unique_copy  ---------------------------------struct unique_copy {  template <class Args>  struct sig {     typedef typename boost::remove_const<        typename boost::tuples::element<3, Args>::type      >::type type;   };  template <class A, class C >  C  operator()(A a, A b, C c) const  { return ::std::unique_copy(a, b, c); }  template <class A, class C, class D>  C  operator()(A a, A b, C c, D d) const  { return ::std::unique_copy(a, b, c, d); }};// reverse  ---------------------------------struct reverse {  template <class Args>  struct sig {     typedef void type;   };  template <class A>  void  operator()(A a, A b) const  { ::std::reverse(a, b); }};// reverse_copy  ---------------------------------struct reverse_copy {  template <class Args>  struct sig {     typedef typename boost::remove_const<        typename boost::tuples::element<3, Args>::type      >::type type;   };  template <class A, class C >  C  operator()(A a, A b, C c) const  { return ::std::reverse_copy(a, b, c); }};// rotate  ---------------------------------struct rotate {  template <class Args>  struct sig {     typedef void type;   };  template <class A>  void  operator()(A a, A b, A c) const  { ::std::rotate(a, b, c); }};// rotate_copy  ---------------------------------struct rotate_copy {  template <class Args>  struct sig {     typedef typename boost::remove_const<        typename boost::tuples::element<3, Args>::type      >::type type;   };  template <class A, class D>  D  operator()(A a, A b, A c, D d) const  { return ::std::rotate_copy(a, b, c, d); }};// random_shuffle  ---------------------------------struct random_shuffle {  template <class Args>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -