boost::assign是boost中一个对容器进行赋值的库,各种方法非常灵活使用。
先举一个例子,供参考:
- /**
- 2 @author Amiber
- 3 @date 2012-12-15
- 4 **/
- 5
- 6 #include <iostream> //for std::cout,std:;endl;
- 7 #include <iterator> //for ostream_iterator
- 8 #include <algorithm> //for std::copy
- 9 #include <vector> //for vector
- 10 #include <boost/assign.hpp> //for operator +=
- 11 #include <boost/assert.hpp> //for BOOST_ASSERT
- 12 #include <boost/assign/std/vector.hpp> //for operator+ vector
- 13 int main(int argc,char* argv[])
- 14 {
- 15
- 16 using namespace boost::assign;
- 17 std::vector<int> vct;
- 18 vct +=1,2,3,4,5,6;
- 19
- 20
- 21 std::copy(vct.begin(),vct.end(),std::ostream_iterator<int>(std::cout," "));
- 22 std::cout<<std::endl;
- 23
- 24 BOOST_ASSERT(vct.size() == 6);
- 25 BOOST_ASSERT(vct[0] == 1);
- 26 BOOST_ASSERT(vct[1] == 2);
- 27
- 28 return 0;
- 29 }
boost::list_inserter、boost::push_back、boost::push_front的用法
- /**
- 2 @author Amiber
- 3 @date 2012-12-15**/
- 7 #include <iostream> //for std::cout
- 8 #include <map> //for map
- 9 #include <vector> //for vector
- 10 #include <deque> //for deque
- 11 #include <set> //for set
- 12 #include <map> //for map
- 13 #include <iterator> //for ostream_iterator
- 14 #include <algorithm> //for std::copy
- 15
- 16 #include <boost/assign/list_inserter.hpp> //for insert
- 17 #include <boost/assert.hpp> // for BOOST_ASSERT
- 18 #include <boost/foreach.hpp> // for BOOST_FOREACH
- 19 #include <boost/typeof/typeof.hpp> //for BOOST_TYPEOF
- 20
- 21 int main(int argc,char* argv[])
- 22 {
- 23
- 24
- 25 /**
- 26 boost::assign::push_back
- 27 **/
- 28
- 29 std::vector<int> vct;
- 30
- 31 boost::assign::push_back(vct) (0)(1)(2);
- 32
- 33 std::copy(vct.begin(),vct.end(),std::ostream_iterator<int>(std::cout," "));
- 34
- 35 std::cout<<std::endl;
- 36
- 37 /**
- 38 boost::assign::push_front
- 39 **/
- 40
- 41 std::deque<int> deq;
- 42
- 43 boost::assign::push_front(deq) (0)(1)(2);
- 44 std::copy(deq.begin(),deq.end(),std::ostream_iterator<int>(std::cout," "));
- 45 std::cout<<std::endl;
- 46
- 47
- 48 /**
- 49 boost::assgin::insert
- 50 **/
- 51
- 52 std::set<int> intSet;
- 53
- 54 boost::assign::insert(intSet) (0)(1)(2);
- 55 std::copy(deq.begin(),deq.end(),std::ostream_iterator<int>(std::cout," "));
- 56 std::cout<<std::endl;
- 57
- 58
- 59 std::map<int,int> intMap;
- 60
- 61 boost::assign::insert(intMap)(0,1)(2,3)(3,4);
- 62
- 63 BOOST_FOREACH(BOOST_TYPEOF(*intMap.begin()) elem,intMap)
- 64 {
- 65 std::cout<<elem.first<<","<<elem.second<<std::endl;
- 66 }
- 67 std::cout<<std::endl;
- 68
- 69 return 0;
- 70 }
- 71
boost::list_of、boost::range、boost::repeat、boost::repeat_fun的用法:
- /**
- @author Amiber
- @date 2012-12-15
- @brief boost::list_of
- **/
- #include <iostream> //for std::cout
- #include <stack> //for stack
- #include <vector> //for vector
- #include <map> //for map
- #include <iterator> //for ostream_iterator
- #include <cstdlib> //for rand
- #include <algorithm> //for std::copy
- #include <boost/assign/list_of.hpp> //for list_of
- #include <boost/assert.hpp> //for BOOST_ASSERT
- #include <boost/typeof/typeof.hpp> //for BOOST_TYPEOF
- #include <boost/foreach.hpp> //for BOOST_FOREACH
- #include <boost/tuple/tuple.hpp>
- int main(int argc,char* argv[])
- {
- /**
- boost::assign::list_of
- **/
- std::vector<int> vct;
- vct = boost::assign::list_of(1)(2)(3);
- std::copy(vct.begin(),vct.end(),std::ostream_iterator<int>(std::cout," "));
- std::cout<<std::endl;
- vct = (boost::assign::list_of(1),2,3);
- std::copy(vct.begin(),vct.end(),std::ostream_iterator<int>(std::cout," "));
- std::cout<<std::endl;
- /**
- boost::assign::map_list_of
- **/
- std::map<int,int> intMap;
- intMap = boost::assign::map_list_of(1,2)(2,3)(3,4);
- BOOST_FOREACH(BOOST_TYPEOF(*intMap.begin()) elem,intMap)
- {
- std::cout<<elem.first<<","<<elem.second<<std::endl;
- }
- /**
- boost::assign.to_adapter
- **/
- std::stack<int> stck;
- stck = boost::assign::list_of(1)(2)(3).to_adapter();
- std::cout<<stck.top()<<std::endl;
- std::cout<<std::endl;
- /**
- boost::assign.repeat
- **/
- std::vector<int> vect;
- vect = boost::assign::list_of(1)(2).repeat(2,3);
- std::copy(vect.begin(),vect.end(),std::ostream_iterator<int>(std::cout," "));
- std::cout<<std::endl;
- /**
- boost::assign.repeat_fun
- **/
- vect = boost::assign::list_of(1)(2).repeat_fun(2,rand);
- std::copy(vect.begin(),vect.end(),std::ostream_iterator<int>(std::cout," "));
- std::cout<<std::endl;
- /**
- boost::assign.range
- **/
- vect = boost::assign::list_of(1)(2).range(vct);
- std::copy(vect.begin(),vect.end(),std::ostream_iterator<int>(std::cout," "));
- std::cout<<std::endl;
- /**
- boost::tuple_list_of
- **/
- std::vector< boost::tuple<int,int> > tupl;
- tupl = boost::assign::tuple_list_of(1,2)(2,3)(3,4);
- std::cout<<boost::get<0>(tupl[1])<<std::endl;
- return 0;
- }
boost::ref_list_of /boost::cref_list_of
通过变量的引用来填充容器
- 1 /**
- 2 @author Amiber
- 3 @date 2012-12-15
- 4 @brief boost::assing::ref_list_of
- 5 **/
- 6
- 7 #include <iostream> //for std::cout
- 8 #include <vector> //for vector
- 9 #include <iterator> // for ostream_iterator
- 10 #include <algorithm> //for std::copy
- 11
- 12 #include <boost/assign/list_of.hpp> //for ref_list_of
- 13 #include <boost/assert.hpp> //for BOOST_ASSERT
- 14 #include <boost/typeof/typeof.hpp> //for BOOST_TYPEOF
- 15 #include <boost/foreach.hpp> //for BOOST_FOREACH
- 16 #include <boost/static_assert.hpp> //for BOOST_ASSERT
- 17
- 18
- 19 template <class Range>
- 20 typename Range::const_iterator max_element(const Range& r)
- 21 {
- 22 return std::max_element(r.begin(),r.end());
- 23 }
- 24
- 25 int main(int argc,char* argv[])
- 26 {
- 27 std::vector<int> vct;
- 28 int a = 1;
- 29 int b = 2;
- 30 int c = 3;
- 31
- 32 /**
- 33 std::assign::ref_list_of
- 34 **/
- 35
- 36 vct = boost::assign::ref_list_of<3>(a)(b)(c);
- 37
- 38 BOOST_FOREACH(BOOST_TYPEOF(*vct.begin()) elem,vct )
- 39 {
- 40 std::cout<<elem<<" ";
- 41 }
- 42
- 43 std::cout<<std::endl;
- 44
- 45 int& tmp = vct[0];
- 46 tmp =11;
- 47 std::cout<<vct[0]<<","<<tmp<<","<<a<<std::endl;
- 48
- 49 std::cout<<std::endl;
- 50
- 51 int& max = *max_element(boost::assign::ref_list_of<3>(a)(b)(c));
- 52
- 53 BOOST_ASSERT(max == c);
- 54
- 55 std::cout<<max<<","<<c<<std::endl;
- 56 max = 10;
- 57
- 58 BOOST_ASSERT(max == c);
- 59 std::cout<<max<<","<<c<<std::endl;
- 60
- 61 /**
- 62 boost::assign::cref_list_of
- 63 **/
- 64 const std::vector<int> cVct(vct);
- 65 int anoMax = *max_element(cVct);
- 66
- 67 BOOST_ASSERT(anoMax ==c);
- 68
- 69 anoMax = 11;
- 70 BOOST_ASSERT(anoMax ==c);
- 71
- 72 return 0;
- 73 }
- 1 /**
- 2 @author Amiber
- 3 @date 2012-12-15
- 4 @brief boost::ptr_push_back\boost::ptr_push_front\boost::ptr_insert\boost::ptr_map_insert
- 5 **/
- 6
- 7
- 8 #include <iostream> //for std::cout
- 9
- 10
- 11 #include <boost/assign/ptr_list_inserter.hpp> //for ptr_push_back\ptr_list_inserter\ptr_push_front
- 12 #include <boost/assign/ptr_map_inserter.hpp> //for ptr_map_inserter
- 13 #include <boost/static_assert.hpp> //for BOOST_ASSERT
- 14 #include <boost/typeof/typeof.hpp> // for BOOST_TYPEOF
- 15 #include <boost/foreach.hpp> // for BOOST_FOREACH
- 16
- 17
- 18 #include <boost/ptr_container/ptr_deque.hpp> //for ptr_deque
- 19 #include <boost/ptr_container/ptr_set.hpp> //for ptr_set
- 20 #include <boost/ptr_container/ptr_map.hpp> //for ptr_map
- 21
- 22
- 23 class Person
- 24 {
- 25 public :
- 26 Person()
- 27 {
- 28 std::cout<<"I am born,but I does not have a name"<<std::endl;
- 29 }
- 30
- 31 Person(const std::string& name)
- 32 {
- 33 this->name = name;
- 34 std::cout<<"I am born,My name is "<<name<<std::endl;
- 35 }
- 36
- 37 ~Person()
- 38 {
- 39 }
- 40
- 41 private :
- 42 std::string name;
- 43
- 44
- 45 public :
- 46 friend bool operator < (const Person& pt1,const Person& pt2)
- 47 {
- 48 return pt1.name > pt2.name;
- 49 }
- 50 };
- 51
- 52
- 53 int main(int argc,char* argv[])
- 54 {
- 55 int a = 1;
- 56 int b = 2;
- 57 int c = 3;
- 58
- 59
- 60 /**
- 61 boost::assign::ptr_push_back
- 62 boost::assign::ptr_push_front
- 63 **/
- 64
- 65 boost::ptr_deque<int> deq;
- 6
- 67 boost::assign::ptr_push_front(deq) (a)(b)(c);
- 68
- 69 BOOST_ASSERT(deq.size() == 3u);
- 70
- 71 BOOST_FOREACH(BOOST_TYPEOF(*deq.begin()) elem , deq)
- 72 {
- 73 std::cout<<elem<<" ";
- 74 }
- 75
- 76 std::cout<<std::endl;
- 77
- 78 boost::ptr_deque<Person> perDeq;
- 79 boost::assign::ptr_push_back(perDeq) ()();
- 80
- 81 boost::assign::ptr_push_back(perDeq) ("Amiber")("Bamboo");
- 82
- 83 /**
- 84 boost::assign::ptr_insert
- 85 boost::assign::pre_map_insert
- 86 **/
- 87
- 88 boost::ptr_set<Person> perSet;
- 89 boost::assign::ptr_insert(perSet) ()();
- 90
- 91 boost::assign::ptr_insert(perSet) ("Amiber")("Bamboo");
- 92
- 93
- 94 boost::ptr_map<int,Person> perMap;
- 95
- 96 boost::assign::ptr_map_insert(perMap) (1,"Amiber")(2,"Bamboo");
- 97 return 0;
- 98 }
-
-
boost::format库提供对了输出的个数类型进行格式化的需求,这里仅作为一个参考,要想更加学会format, 可以自学boost文档。下面是一个例子:
- /**
- 2 @author Amiber
- 3 @date 2012-12-16
- 4 @brief boost::format
- 5 **/
- 6
- 7 #include <iostream> //for std::cout
- 8 #include <exception>
- 9
- 10 #include <boost/format.hpp> //for format
- 11 #include <boost/static_assert.hpp> // for BOOST_ASSERT
- 12
- 13 int main(int argc,char* argv[])
- 14 {
- 15
- 16 int a = 10;
- 17 int b = 11;
- 18 double c = 23.2344;
- 19
- 20 /**
- 21 format %N% %N%
- 22 **/
- 23 std::cout<<boost::format("%1%,%2%,%1%") % a % b<<std::endl;
- 24
- 25 /**
- 26 format %d
- 27 **/
- 28
- 29 std::cout<<boost::format("%d,%d") % a %b <<std::endl;
- 30
- 31
- 32 /**
- 33 format %1$ [flag] [...]
- 34 **/
- 35
- 36 std::cout<<boost::format("%.3f") %c <<std::endl;
- 37 std::cout<<boost::format("%1$+5.3f") %c <<std::endl;
- 38
- 39 std::cout<<boost::format("%1$p") % a <<std::endl;
- 40
- 41 /**
- 42 format group()
- 43 **/
- 44
- 45 std::string str="Amiber";
- 46
- 47 std::cout<<boost::format("My name is %1%,my money is %2%") % str % boost::io::group(std::hex,1430)<<std::endl;
- 48
- 49 /**
- 50 boost::format::clear
- 51 boost::format::parse
- 52 **/
- 53
- 54 std::string formstr="%d<->%d";
- 55 boost::format fmt(formstr);
- 56
- 57 std::cout<<fmt % a % b <<std::endl;
- 58
- 59 fmt.clear();
- 60
- 61 fmt.parse("%d>-<%d");
- 62
- 63
- 64 std::cout<<fmt % a %b <<std::endl;
- 65
- 66 /**
- 67 boost::format::size
- 68 boost::format::str
- 69 **/
- 70
- 71 BOOST_ASSERT(fmt.size() !=0);
- 72
- 73 std::cout<<fmt.str()<<std::endl;
- 74
- 75 /**
- 76 boost::io::too_many_args
- 77 boost::io::too_few_args
- 78 boost::io::bad_format_string
- 79 **/
- 80
- 81 try
- 82 {
- 83 std::cout<<fmt % 1 % 2 %3 <<std::endl;
- 84 }catch(const boost::io::too_many_args& e)
- 85 {
- 86 std::cout<<"This exceptions is "<<e.what()<<std::endl;
- 87 }
- 88
- 89
- 90 try
- 91 {
- 92 std::cout<<fmt % 1 <<std::endl;
- 93 }catch(const boost::io::too_few_args& e)
- 94 {
- 95 std::cout<<"Another exception is "<<e.what()<<std::endl;
- 96 }
- 97 return 0;
- 98 }