C++ で vector を初期化する方法

この記事では、C++ で vector を定数値で初期化する方法を説明します。

初期化リスト記法を使用して C++ の ベクトル 要素に定数値を割り当てる

このメソッドは C++11 スタイルからサポートされており、変数 vector を定数で初期化する比較的読みやすい方法です。値は braced-init-list として指定され、その前に代入演算子が付けられます。この表記法はしばしばコピーリスト初期化と呼ばれます。

#include <iostream>
#include <vector>

using std::cout; using std::cin;
using std::endl; using std::vector;
using std::string;

int main() {
    vector<string> arr = {"one", "two", "three", "four"};
    for (const auto &item : arr) {
        cout << item << "; ";
    }
    return EXIT_SUCCESS;
}

出力:

one; two; three; four;

別の方法として、以下のコードブロックに示すように、vector 変数を宣言する際にイニシャライザリストのコンストラクタ呼び出しを使用する方法があります。

#include <iostream>
#include <vector>

using std::cout; using std::cin;
using std::endl; using std::vector;
using std::string;

int main() {
    vector<string> arr{"one", "two", "three", "four"};
    for (const auto &item : arr) {
        cout << item << "; ";
    }
    return EXIT_SUCCESS;
}

プリプロセッサマクロは、イニシャライザリスト記法を実装する別の方法です。この例では、INIT オブジェクトライクなマクロとして定数要素の値を定義し、次のように vector 変数に代入します。

#include <iostream>
#include <vector>

using std::cout; using std::cin;
using std::endl; using std::vector;
using std::string;

#define INIT {"one", "two", "three", "four"}

int main() {
    vector<string> arr = INIT;
    for (const auto &item : arr) {
        cout << item << "; ";
    }
    return EXIT_SUCCESS;
}

C++11 の初期化リスト構文は非常に強力なツールであり、次のコードサンプルに示すように、複雑な構造体の vector をインスタンス化するために利用できます。

#include <iostream>
#include <vector>

using std::cout; using std::cin;
using std::endl; using std::vector;
using std::string;

struct cpu {
    string company;
    string uarch;
    int year;
} typedef cpu;

int main() {
    vector<cpu> arr = {{"Intel", "Willow Cove", 2020},
                       {"Arm", "Poseidon", 2021},
                       {"Apple", "Vortex", 2018},
                       {"Marvell", "Triton", 2020}};

    for (const auto &item : arr) {
        cout << item.company << " - "
             << item.uarch << " - "
             << item.year << endl;
    }

    return EXIT_SUCCESS;
}

出力:

Intel - Willow Cove - 2020
Arm - Poseidon - 2021
Apple - Vortex - 2018
Marvell - Triton - 2020

関連記事 - C++ Vector

  • C++ でベクトルを反復処理する方法
  • comments powered by Disqus