9 października 2012

Boost.Assignment - list_of

Biblioteka, której celem jest łatwe wypełnianie kontenerów: http://www.boost.org/doc/libs/1_51_0/libs/assign/doc/index.html

Do wypełnienia większości kontenerów możemy posłużyć się metodą list_of(), w przypadku mapy będzie to metoda map_list_of(), a krotki tuple_list_of().
#include <vector>
#include <list>
#include <map>
#include <string>
#include <iostream>
#include <boost/foreach.hpp>

#include <boost/assign/list_of.hpp>

int main()
{
    std::vector<int> vec = boost::assign::list_of(45)(78);
    std::list<int> lst = boost::assign::list_of(105)(108);

    BOOST_FOREACH(int& value, vec) {
        std::cout << "Value: " << value << std::endl;
    }

    BOOST_FOREACH(int& value, lst) {
        std::cout << "Value: " << value << std::endl;
    }

    typedef std::map<std::string, int> map_type;
    map_type mp = boost::assign::map_list_of("first", 1)("second", 2);

    BOOST_FOREACH(const map_type::value_type& value, mp) {
        std::cout << "Value: " << value.first << std::endl;
    }

    return 0;
}
Wynik:
Value: 45
Value: 78

Value: 105
Value: 108

Value: first
Value: second
Biblioteka posiada dodatkowo szereg innych przydatnych funkcji: przeciążony operator +=, który umożliwia dopisywanie się na końcu wektora, insert() dostawianie dodatkowych elementów do mapy, albo repeat(), który kilkukrotnie powtarza wstawianie danej wartości, itp.
#include <boost/assign/std/vector.hpp> // dla'operator+=()'
#include <boost/assign/std/list.hpp>
#include <boost/assign/list_inserter.hpp> // dla 'insert()'

using namespace boost::assign; // dla wygody korzystania z +=

// ...

vec += 5, boost::assign::repeat(3, 69), 6;
lst += 8, 9;
insert(mp)("aaa", 3)("bbb", 4);
Wynik:
Value: 45
Value: 78
Value: 5
Value: 69
Value: 69
Value: 69
Value: 6

Value: 105
Value: 108
Value: 8
Value: 9

Value: aaa
Value: bbb
Value: first
Value: second

Brak komentarzy:

Prześlij komentarz