c++ - Initialization of list of sets of integers in C++98 -
this might seem trivial wasn't able find on web far, so
i want initialize list of sets of integers or set of sets of integers, this:
list< set<int> > lsi = {{}}; or maybe this:
set< set<int> > ssi = {{5}, {6}, {7}}; in c++98. reason have submit exercise in submission system not accept c++11.
i have found out how initialize container in old syntax array of integers, example
int tmp[] = {1,2,3}; set<int> s (tmp, tmp + sizeof(tmp) / sizeof(tmp)); but not list< set<int> >.
as mentioned in comments, not possible without c+11 / boost.
that being said, shortest way initialize repeating set's initialization (which mentioned in question):
int set1v[] = {10, 20, 30, 40}; int set2v[] = {11, 22, 33, 44}; int set3v[] = {15, 25, 35, 45}; set<int> setv[] = { set<int>(set1v, set1v + sizeof(set1v) / sizeof(set1v[0])), set<int>(set2v, set2v + sizeof(set2v) / sizeof(set2v[0])), set<int>(set3v, set3v + sizeof(set3v) / sizeof(set3v[0])) }; set< set<int> > myset(setv, setv + sizeof(setv) / sizeof(setv[0])); btw, since you're checking arrays' sizes many times i'd suggest use count macro:
#define count_of(x) ((sizeof(x)/sizeof(0[x])) / ((size_t)(!(sizeof(x) % sizeof(0[x]))))) it little better:
#define end_of(x) (x + count_of(x)) int set1v[] = {10, 20, 30, 40}; int set2v[] = {11, 22, 33, 44}; int set3v[] = {15, 25, 35, 45}; set<int> setv[] = { set<int>(set1v, end_of(set1v)), set<int>(set2v, end_of(set2v)), set<int>(set3v, end_of(set3v)) }; set< set<int> > myset(setv, end_of(setv));
Comments
Post a Comment