std::initializer list
提供: C++入門
スポンサーリンク
std::initializer_list とは、C++11で追加されたクラスで初期化リストを扱うための機能を提供します。
読み方
- std::initializer_list
- えすてぃーでぃー いにしゃらいざー りすと
目次
概要
配列や構造体は、初期化リストを扱えました。
int a[] = {1,2,3}; struct Foo {int i; int j;}; Foo foo = { 123, 456 };
しかしながら、クラスでは、上記のような構文で初期化できませんでした。 C++11では、クラスでも初期化リストを扱えるように、std::initializer_listを追加しました。
std::initializer_listを使うとこのようなこともできます。
for(auto i: {1,2,3,4,5}){ cout << i << " "; }
コンパイラ
- clang++ 3.3 では、使用できません。
- gcc49 を使用しました。
ヘッダファイル
#include <initializer_list>
initializer_list1.cpp の例
コンストラクタで初期化リストを受け取り、std::vectorに入れる例です。std::vectorには、従来通りの方法で入れています。
ソースコード initializer_list1.cpp
#include <iostream> #include <vector> #include <initializer_list> using namespace std; class C { vector<int> v; public: C (std::initializer_list<int> list) { for (auto it: list) { v.push_back(it); } } friend std::ostream& operator<<(std::ostream& os, const C& c) { for (auto it: c.v) { os << it << " "; } return os; } }; int main(int argc, char const* argv[]) { C c = {1,2,3}; cout << c << endl; return 0; }
コンパイル
g++49 -std=c++11 initializer_list1.cpp -o initializer_list1
実行例
% ./initializer_list1 1 2 3
Range-based forとinitializer_listを組み合わせた例
ソースコード range-based-for_with_initializer_list.cpp
#include <iostream> #include <initializer_list> using namespace std; int main(int argc, char const* argv[]) { for(auto i: {1,2,3,4,5}){ cout << i << " "; } cout << endl; return 0; }
コンパイル
g++49 -std=c++11 -I/usr/local/lib/gcc49/include/c++/ \ -Wl,-rpath=/usr/local/lib/gcc49 \ range-based-for_with_initializer_list.cpp -o range-based-for_with_initializer_list
実行例
% ./range-based-for_with_initializer_list 1 2 3 4 5
関連項目
ツイート
スポンサーリンク