boost.algorithm boost.assign boost.lambda

来源:互联网 发布:ubuntu g 编辑:程序博客网 时间:2024/04/30 01:31
// algrothim.cpp : 定义控制台应用程序的入口点。//made by davdidsu33//#include "stdafx.h"#include <boost/config/warning_disable.hpp>#include <boost/algorithm/minmax.hpp>#include <boost/algorithm/minmax_element.hpp>#include <boost/algorithm/hex.hpp>#include <boost/algorithm/string.hpp>#include <boost/algorithm/string_regex.hpp>#include <boost/algorithm/clamp.hpp>#include <boost/typeof/typeof.hpp>#include <boost/tuple/tuple.hpp>#include <boost/algorithm/gather.hpp>#include <boost/lambda/lambda.hpp>#include <boost/function.hpp>#include <algorithm>#include <string>#include <boost/assert.hpp>#include <boost/assign.hpp>void use_minmax(){BOOST_AUTO( r ,boost::minmax(200, 30));BOOST_ASSERT(boost::get<0>(r) == 30);struct Compare{bool beyondNum(const std::string& s1){for (int i=0; i<s1.size(); ++i){if (s1[i]< '0' || s1[i]>'9'){return true;}}return true;}bool operator()(const std::string& s1, const std::string& s2){if(beyondNum(s1))return true;if (beyondNum(s2))return false;return s1 <  s2;}};std::string s1("100");std::string s2("100a");//直接这么写会在boost1.5.5中报错,因为//cref可能是stl的也可能是boost的,所以无法正确解析//BOOST_AUTO(r2, boost::minmax<std::string>(s1, s2, Compare()));//正确做法//using namespace std;//BOOST_AUTO(r2, boost::minmax<std::string>(s1, s2));BOOST_AUTO(r3, boost::minmax(10, 20));//BOOST_ASSERT(boost::get<0>(r2).compare("100a") == 0);//BOOST_ASSERT(boost::get<1>(r2).compare("100") == 0);}void use_minmaxelement(){using namespace boost::assign;std::vector<int> v;v += 1, 2,3,1,5,6,100,20,200,30,200;std::minmax_element(v.begin(), v.end(), std::less<int>());BOOST_AUTO(it, boost::minmax_element(v.begin(), v.end(), std::less<int>()));BOOST_ASSERT((*(it.first) == 1));BOOST_ASSERT((*(it.second)) == 200);BOOST_AUTO(firstMaxIt, boost::first_max_element(v.begin(), v.end()));int pos = firstMaxIt - v.begin();BOOST_ASSERT(pos == 8);BOOST_ASSERT(*firstMaxIt == 200);BOOST_AUTO(firstMinIt,boost::first_min_element(v.begin(), v.end()));pos = firstMinIt - v.begin();BOOST_ASSERT(pos == 0);BOOST_ASSERT(*firstMinIt == 1);std::vector<int> v2 = (list_of(20) (30) (40) (20) (50) (60) (90) (90));int stop = 100000000;}template<class T>struct IsEven{bool operator()(T const &val){return (val % 2 == 0);}};void use_hex(){std::string hex1 = boost::algorithm::hex<std::string>("1234");std::string hex2 = boost::algorithm::hex<std::string>("4567");//int hex3 = boost::algorithm::hex<int>(1234);std::string unhex1 = boost::algorithm::unhex(hex1);std::string unhex2 = boost::algorithm::unhex(hex2);//clamp(testvalue, lowvalue, highvalue);int r = boost::algorithm::clamp(10, 20, 30);BOOST_ASSERT(r == 20);r = boost::algorithm::clamp(21, 20, 30);BOOST_ASSERT(r == 21);r = boost::algorithm::clamp(31, 20, 30);BOOST_ASSERT(r == 30);//boost.algorithm.gather//临时结构体struct GetVal{GetVal(int val):m_startVal(val){};int operator()(){return ++m_startVal;}private:int m_startVal;};//局部函数using namespace boost::lambda;boost::function<int ()> f = GetVal(1);using namespace boost::assign;std::vector<int> v = list_of(1).repeat_fun(9, f);//或者//std::vector<int> v = list_of(1).repeat_fun(9,GetVal(1));//boost::algorithm::gather(v.begin(), v.end(), v.begin()+1, IsEven<int>());int stop = 0;}int main(int argc, char* argv[]){use_minmax();use_minmaxelement();use_hex();getchar();return 0;}


0 0