C++ で構造体のベクトルを初期化する
胡金庫
2023年10月12日
- C++ で構造体のベクトルを初期化するためにイニシャライザリストコンストラクタを使用する
- 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
オブジェクトの別のコピーを作成する必要がある場合に便利です。以下のコードサンプルでは、構造体 Person
の parr3
ベクトルを宣言し、同じ型の 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
著者: 胡金庫