C++でコンテナの初期化・要素追加が手軽にできるBoost.Assign

ヘッダー

boost/assign.hpp

できること

コンテナの初期化・要素追加が手軽にできる.

使用例

前準備
#include <boost/assign.hpp>
using namespace boost::assign;
vector

簡単.

// 初期化
vector<int> v = list_of(1)(2)(3);

// 末尾への要素の追加(push_back)
v += 4, 5, 6;

// v = {1, 2, 3, 4, 5, 6}
list

push_front時の要素が追加される順番に注意.

// 初期化
list<int> l = list_of(4)(5)(6);

// 末尾への要素の追加(push_back)
l += 7, 8, 9;

// 先頭への要素の追加(push_front)
push_front(l) = 3, 2, 1;

// l = {1, 2, 3, 4, 5, 6, 7, 8, 9}
deque

listと同様.

コンテナの要素がpairの場合

要素がpairの場合でもよしなにやってくれる.

// 初期化
deque<pair<string, int> > d = list_of<pair<string, int> >("ccc", 3)("ddd", 4);

// 末尾への要素の追加(push_back)
push_back(d)("eee", 5)("fff", 6);

// 先頭への要素の追加(push_front)
push_front(d)("bbb", 2)("aaa", 1);

// d = {("aaa", 1), ("bbb", 2), ("ccc", 3), ("ddd", 4), ("eee", 5), ("fff", 6)}
set
// 初期化
set<string> s = list_of("ccc")("ddd");

// 要素の追加(insert)
s += "aaa", "bbb";

// setなので重複する要素は追加されない
s += "aaa";

// s = {"aaa", "bbb", "ccc", "ddd"}
map
// 初期化
map<string, int> m = map_list_of("ccc", 3)("ddd", 4);

// 要素の追加(insert)
insert(m)("aaa", 1)("bbb", 2);

// mapなのでkeyが重複する要素は追加されない
insert(m)("aaa", 5);

// m = {("aaa", 1), ("bbb", 2), ("ccc", 3), ("ddd", 4)}