C++ の多次元ベクトル

Naila Saad Siddiqui 2024年2月15日
C++ の多次元ベクトル

この簡単なプログラミング チュートリアルでは、C++ での多次元ベクトルの概要について説明します。 ベクターは、自動サイズ変更機能を備えた C++ の動的配列のようなデータを格納できるコンテナーです。

C++ の多次元ベクトル

C++ 多次元ベクトルと呼ばれる抽象的なデータ構造は、いくつかの C++ 構築コンポーネントを使用して作成できますが、このチュートリアルでは主に、標準テンプレート ライブラリ std::vector コンテナーの実装について説明します。 std::vector クラスのいくつかのメソッドを使用して、多次元ベクトルの操作を簡素化します。

C++ での 2D ベクトルの宣言と初期化

別のベクトルのテンプレート パラメータ内にベクトル指定子を配置することにより、2 次元ベクトルを指定できます。

要素のデータ型には内部ベクトルのみが設定されていることに注意してください。 行列を表現し、関連する操作を 2 次元ベクトルを使用して実行することができます。

次のコード サンプルは、2 次元ベクトルの定義とリストの初期化を示しています。

整数メンバーをランダムに持つ 2 次元ベクトルを定義することにしました。 次のサンプル コードには、mat1mat2、および mat3 というラベルが付いた 3つのベクトルがあります。

ご覧のとおり、各行に同じ数の要素があるわけではありません。 最後に、PrintMatrix と呼ばれる ヘルパー関数 を使用して、これらのベクトルのデータを出力します。

#include <iomanip>
#include <iostream>
#include <vector>
using namespace std;

void PrintMatrix(vector<vector<int>> vec) {
  for (auto &item : vec) {
    for (auto &elem : item) cout << elem << "  ";
    cout << endl;
  }
  cout << endl;
}
int main() {
  vector<vector<int>> mat1 = {{0, 1, 2}, {3, 4, 5}, {6, 7}};
  vector<vector<int>> mat2 = {{10, 9}, {8, 7, 6, 5}, {4, 3, 2}};
  vector<vector<int>> mat3 = {{11, 12}, {13}, {14, 15, 16, 17, 18, 19}};
  PrintMatrix(mat1);
  PrintMatrix(mat2);
  PrintMatrix(mat3);
  return 0;
}

上記のコード スニペットで、3つのベクトルの各行のサイズが異なることがわかります。 これらのサイズは、初期化されたデータに従って自動的に調整されます。

コードは次の出力を提供します。

C++ 2D ベクトル出力

C++ での 3D ベクトルの宣言と初期化

2D ベクトルと同様に、3D ベクトルは ベクトルのベクトル のベクトルです。 3 次元マトリックスのようなものです。

以下の例に示すように、構文は 2D ベクトルと同じパターンに従います。

vector<vector<vector<int>>> threeDVector = {{{11, 12}, {12, 13}, {13, 14, 15}},
                                            {{11, 12}, {12, 13}, {13, 14}},
                                            {{11, 12}, {12, 13}, {13, 14}}};

for (int a = 0; a < threeDVector.size(); a++) {
  for (int b = 0; b < threeDVector[a].size(); b++) {
    for (int c = 0; c < threeDVector[a][b].size(); c++) {
      cout << threeDVector[a][b][c] << " ";
    }
    cout << endl;
  }
  cout << endl;
}

これにより、次の出力が得られます。

C++ 3D ベクター出力

したがって、ベクトルは配列のように機能しますが、メモリと時間の点で操作と使用がより効率的であると言えます。

関連記事 - C++ Vector