I started using boost::assign for cases when I want to statically assign specific values ββ(examples removed from the link above).
#include <boost/assign/std/vector.hpp> using namespace boost::assign; // bring 'operator+()' into scope { vector<int> values; values += 1,2,3,4,5,6,7,8,9; }
You can also use boost::assign for maps.
#include <boost/assign/list_inserter.hpp> #include <string> using boost::assign; std::map<std::string, int> months; insert( months ) ( "january", 31 )( "february", 28 ) ( "march", 31 )( "april", 30 ) ( "may", 31 )( "june", 30 ) ( "july", 31 )( "august", 31 ) ( "september", 30 )( "october", 31 ) ( "november", 30 )( "december", 31 );
You can enable direct assignment with list_of() and map_list_of()
#include <boost/assign/list_of.hpp> // for 'list_of()' #include <list> #include <stack> #include <string> #include <map> using namespace std; using namespace boost::assign; // bring 'list_of()' into scope { const list<int> primes = list_of(2)(3)(5)(7)(11); const stack<string> names = list_of( "Mr. Foo" )( "Mr. Bar") ( "Mrs. FooBar" ).to_adapter(); map<int,int> next = map_list_of(1,2)(2,3)(3,4)(4,5)(5,6); // or we can use 'list_of()' by specifying what type // the list consists of next = list_of< pair<int,int> >(6,7)(7,8)(8,9); }
There are also functions for repeat() , repeat_fun() and range() that allow you to add duplicate values ββor ranges of values.