トップページ – Modern C++編 C++編](../../index.html) – 第8章
問題① 次のように呼び出すことができる関数 f を作成してください。
({0, 1, 2}); f
実引数で、{ } を使った初期化リストを指定するには、関数の仮引数を std::initializer_list にすればよいです。
#include <initializer_list>
#include <iostream>
void f(std::initializer_list<int> lst)
{
for (int v : lst) {
std::cout << v << std::endl;
}
}
int main()
{
({ 0, 1, 2 });
f}
実行結果:
0
1
2
問題② 次のコードが動作するように、MyClass を実装してください。受け取った要素は、メンバ変数の std::vector に保存するようにしてください。
int main()
{
= {0, 1, 2};
MyClass mc = {9, 8, 7};
mc }
リスト初期化を受け付けるには、仮引数が std::initializer_list のコンストラクタを定義します。初期化リストは std::initializer_list に変換されるので、結局、これがあれば代入も可能になります。
以下、実装例です。確認のため Printメンバ関数も実装しています。
#include <initializer_list>
#include <iostream>
#include <vector>
class MyClass {
public:
(std::initializer_list<int> lst) :
MyClass(lst)
mElems{
}
void Print() const
{
for (int e : mElems) {
std::cout << e << std::endl;
}
}
private:
std::vector<int> mElems;
};
int main()
{
= { 0, 1, 2 };
MyClass mc .Print();
mc
= { 9, 8, 7 };
mc .Print();
mc}
実行結果:
0
1
2
9
8
7
std::vector にも、仮引数が std::initializer_list のコンストラクタがあるので(第6章)、初期化リストをそのまま引き渡せます。
新規作成。
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
RSS | 管理者情報 | プライバシーポリシー |