C++ でオブジェクトの配列を初期化する

胡金庫 2023年10月12日
  1. C++ で new 演算子を使用してパラメーター化されたコンストラクターを使用してオブジェクトの配列を初期化する
  2. パラメーター化されたコンストラクターで std::vector::push_back 関数を使用してオブジェクトの配列を初期化する
  3. パラメーター化されたコンストラクターで std::vector::emplace_back 関数を使用してオブジェクトの配列を初期化する
C++ でオブジェクトの配列を初期化する

この記事では、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
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

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

LinkedIn Facebook

関連記事 - C++ Array