C++ でオブジェクトの配列を初期化する
-
C++ で
new
演算子を使用してパラメーター化されたコンストラクターを使用してオブジェクトの配列を初期化する -
パラメーター化されたコンストラクターで
std::vector::push_back
関数を使用してオブジェクトの配列を初期化する -
パラメーター化されたコンストラクターで
std::vector::emplace_back
関数を使用してオブジェクトの配列を初期化する
![C++ でオブジェクトの配列を初期化する](/img/Cpp/feature-image---array-of-objects-in-cpp.webp)
この記事では、C++ でパラメーター化されたコンストラクターを使用してオブジェクトの配列を初期化する方法について説明します。
C++ で new
演算子を使用してパラメーター化されたコンストラクターを使用してオブジェクトの配列を初期化する
new
演算子は C++ 動的メモリ管理インターフェイスの一部であり、C 言語の malloc
関数と同等です。動的メモリ管理では、ユーザーが指定された固定サイズのメモリを割り当て、不要になったときにシステムに返すというフローが必要になることに注意してください。
new
は、システムに固定バイト数を要求するために使用されます。これにより、呼び出しが成功した場合にメモリ領域へのポインタが返されます。次の例では、2つのコンストラクターを持つ Pair
という名前のクラスと、データメンバーをコンソールに出力するための printPair
を定義しました。最初に、new
演算子を使用して Pairs
の 4 メンバー配列を割り当てる必要があります。次に、for
ループを使用して配列をトラバースし、反復ごとにパラメーター化されたコンストラクターを使用して要素を初期化します。ただし、割り当てられた配列は、プログラムが終了する前に delete
演算子を使用して解放する必要があることに注意してください。配列の各要素の割り当てを解除するには、delete []
表記が必要であることに注意してください。
#include <iostream>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;
class Pair {
int x, y;
public:
Pair() = default;
Pair(int a, int b) : x(a), y(b) {}
void printPair() const { cout << "x: " << x << endl << "y: " << y << endl; }
};
int main() {
Pair *arr = new Pair[4];
for (int i = 0; i < 4; ++i) {
arr[i] = Pair(i * 2, i * i);
}
for (int i = 0; i < 4; ++i) {
arr[i].printPair();
}
delete[] arr;
return EXIT_SUCCESS;
}
出力:
x: 0
y: 0
x: 2
y: 1
x: 4
y: 4
x: 6
y: 9
パラメーター化されたコンストラクターで std::vector::push_back
関数を使用してオブジェクトの配列を初期化する
あるいは、よりヘッドレスなアプローチは、オブジェクトを std::vector
コンテナに格納することです。これにより、新しい要素を動的に初期化するための組み込み関数が提供されます。つまり、Pair
定義は同じままですが、反復ごとに push_back
関数を呼び出し、2 番目のコンストラクターから Pair
値を渡します。プラス面として、メモリリソースの割り当て解除について心配する必要はありません。それらは自動的にクリーンアップされます。
#include <iostream>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;
class Pair {
int x, y;
public:
Pair() = default;
Pair(int a, int b) : x(a), y(b) {}
void printPair() const { cout << "x: " << x << endl << "y: " << y << endl; }
};
int main() {
vector<Pair> array;
for (int i = 0; i < 4; ++i) {
array.push_back(Pair(i * 2, i * i));
}
for (const auto &item : array) {
item.printPair();
}
return EXIT_SUCCESS;
}
出力:
x: 0
y: 0
x: 2
y: 1
x: 4
y: 4
x: 6
y: 9
パラメーター化されたコンストラクターで std::vector::emplace_back
関数を使用してオブジェクトの配列を初期化する
パラメータ化されたコンストラクタを使用してオブジェクトの配列を初期化する別の方法は、std::vector
クラスの emplace_back
関数を利用することです。このように、Pair
コンストラクターの値を渡すだけで、emplace_back
が自動的に新しい要素を作成します。前の方法と同様に、これもユーザーがメモリ管理について心配する必要はありません。
#include <iostream>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;
class Pair {
int x, y;
public:
Pair() = default;
Pair(int a, int b) : x(a), y(b) {}
void printPair() const { cout << "x: " << x << endl << "y: " << y << endl; }
};
int main() {
vector<Pair> array;
for (int i = 0; i < 4; ++i) {
array.emplace_back(i * 2, i * i);
}
for (const auto &item : array) {
item.printPair();
}
return EXIT_SUCCESS;
}
出力:
x: 0
y: 0
x: 2
y: 1
x: 4
y: 4
x: 6
y: 9