C++ で構造体のベクトルを初期化する

胡金庫 2023年10月12日
  1. C++ で構造体のベクトルを初期化するためにイニシャライザリストコンストラクタを使用する
  2. C++ で範囲コンストラクタを使用して構造体のベクトルを初期化する
  3. C++ でカスタムコンストラクタを使用して構造体のベクトルを初期化する
C++ で構造体のベクトルを初期化する

この記事では、C++ で構造体のベクトルを初期化する方法について、複数のメソッドをデモします。

C++ で構造体のベクトルを初期化するためにイニシャライザリストコンストラクタを使用する

初期化リストは、定数値を持つコンテナを初期化する一般的な方法です。この方法は、ある種の開始状態を持つ必要があるデータ構造体に適しています。以下の例では、vector にはカスタム定義された Person 構造体が含まれているので、初期化リストの項目は中括弧でグループ化し、コロンで区切る必要があります。構造体の要素は struct.element 記法を用いてアクセスされ、コンソールに出力されることに注意してください。

#include <iostream>
#include <string>
#include <vector>

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

struct Person {
  string name;
  string surname;
  int age;
};

int main() {
  vector<Person> parr1 = {{"John", "Cooper", 32},
                          {"Theo", "Parrot", 23},
                          {"Aun", "Chao", 43},
                          {"Vivien", "Bardot", 67}};

  for (const auto &arr : parr1) {
    cout << "Name: " << arr.name << endl
         << "Surname: " << arr.surname << endl
         << "Age: " << arr.age << endl;
  }

  return EXIT_SUCCESS;
}

出力:

Name: John
Surname: Cooper
Age: 32
Name: Theo
Surname: Parrot
Age: 23
Name: Aun
Surname: Chao
Age: 43
Name: Vivien
Surname: Bardot
Age: 67

C++ で範囲コンストラクタを使用して構造体のベクトルを初期化する

あるいは、構造体の vector を初期化するために範囲コンストラクタを利用することもできます。このメソッドは、既存の vector オブジェクトの別のコピーを作成する必要がある場合に便利です。以下のコードサンプルでは、構造体 Personparr3 ベクトルを宣言し、同じ型の parr1 ベクトルの内容で初期化しています。

#include <iostream>
#include <string>
#include <vector>

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

struct Person {
  string name;
  string surname;
  int age;
};

int main() {
  vector<Person> parr1 = {
    {"John", "Cooper", 32}, {"Theo", "Parrot", 23}, {"Kim", "Colbert", 53},
    {"Aun", "Chao", 43},

    vector<Person> parr3(parr1.begin(), parr1.end());

  for (const auto &arr : parr3) {
    cout << "Name: " << arr.name << endl
         << "Surname: " << arr.surname << endl
         << "Age: " << arr.age << endl;
  }

  return EXIT_SUCCESS;
}

出力:

Name: John
Surname: Cooper
Age: 32
Name: Theo
Surname: Parrot
Age: 23
Name: Kim
Surname: Colbert
Age: 53
Name: Aun
Surname: Chao
Age: 43

C++ でカスタムコンストラクタを使用して構造体のベクトルを初期化する

もう一つの解決策は vector 固有のコンストラクタであり、これはベクトルを同じ値の任意の数で初期化する機能を提供します。この場合、コンストラクタに構造体 Person 型の単一要素と任意の数 3 を与えてオブジェクトを初期化します。

#include <iostream>
#include <string>
#include <vector>

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

struct Person {
  string name;
  string surname;
  int age;
};

constexpr int NUM = 3;

int main() {
  vector<Person> parr4(NUM, {"John", "Cooper", 32});

  for (const auto &arr : parr4) {
    cout << "Name: " << arr.name << endl
         << "Surname: " << arr.surname << endl
         << "Age: " << arr.age << endl;
  }

  return EXIT_SUCCESS;
}

出力:

Name: John
Surname: Cooper
Age: 32
Name: John
Surname: Cooper
Age: 32
Name: John
Surname: Cooper
Age: 32
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

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

LinkedIn Facebook

関連記事 - C++ Vector