CS253 Initializer Lists
Consider this code:
vector<int> v = {11,22,33,44,55};
{11,22,33,44,55}
?
initializer_list
{11,22,33,44,55}
is an object of the type initializer_list<int>
.
2.71828
is a double
.
iterator
.size()
.begin()
.end()
.empty()
, for are no empty initializer lists.
initializer_list<
what?>
Why is the name so god-awful long?
init
, that breaks many
user programs that already use init
.
Since an initializer_list
has iterators, .begin()
, and .end()
,
we can use it in a for
loop:
for (auto v : {11,22,33,44,55}) cout << v << ' ';
11 22 33 44 55
or, more explicitly:
auto il = {11,22,33,44,55}; auto it = il.begin() + 3; cout << *it << '\n';
44
or, even:
auto il = {11,22,33,44,55}; cout << *(il.begin()+3) << '\n';
44
So, how does this work?
unordered_set<int> us = {345,678,901,234,567,890}; for (auto v : us) cout << v << ' ';
890 567 234 901 678 345
us
.
initializer_list
The ctor must be this:
unordered_set(const initializer_list<value_type> &);
value_type
is a typedef
for the
type being stored by the vector.
unordered_set::operator=(const initializer_list<value_type> &)
{ … }
for your container, you must write methods:
class Hundred { int data[100]; public: int &operator[](int n) { return data[n]; } }; Hundred h; h[1] = 400; h[4] = 123; cout << h[1]+h[4] << '\n';
523
class Hundred { int data[100]; public: int &operator[](int n) { return data[n]; } }; Hundred h = {11,22,33,44,55}; cout << h[1]+h[4] << '\n';
c.cc:7: error: could not convert '{11, 22, 33, 44, 55}' from '<brace-enclosed initializer list>' to 'main()::Hundred'
class Hundred { int data[100]; public: Hundred(const initializer_list<int> &il) { copy(il.begin(), il.end(), data); } int &operator[](int n) { return data[n]; } }; Hundred h = {11,22,33,44,55}; cout << h[1]+h[4] << '\n';
77
Modified: 2017-04-24T16:17 User: Guest Check: HTML CSSEdit History Source |
Apply to CSU |
Contact CSU |
Disclaimer |
Equal Opportunity Colorado State University, Fort Collins, CO 80523 USA © 2015 Colorado State University |