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

胡金庫 2023年10月12日
C++ で vector を初期化する方法

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

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

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

#include <iostream>
#include <vector>

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

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::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;

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::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;

#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::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;

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
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook

関連記事 - C++ Vector