C++ STL でベクトルの配列を宣言する
胡金庫
2023年10月12日
この記事では、C++ でベクトルの配列を宣言する方法に関する複数のメソッドを示します。
C++ で C スタイルの配列表記を使用してベクトルの配列を宣言する
ベクトルの固定配列は、C スタイルの配列ブラケット表記-[]
で宣言できます。このメソッドは基本的に、固定数の行と可変数の列を持つ 2 次元配列を定義します。列は、push_back
関数呼び出しと、必要に応じて arr[x][y]
表記でアクセスされる要素を使用して追加できます。次の例では、配列の各列に 10 個のランダムな整数値をプッシュします。これにより、10 行 10 列の行列が作成されます。
#include <iomanip>
#include <iostream>
#include <vector>
using std::array;
using std::cout;
using std::endl;
using std::setw;
using std::vector;
int main() {
vector<int> arr_vectors[10];
for (auto &vec : arr_vectors) {
for (int i = 0; i < 10; ++i) {
vec.push_back(rand() % 100);
}
}
for (auto &item : arr_vectors) {
for (auto &i : item) {
cout << setw(3) << i << "; ";
}
cout << endl;
}
return EXIT_SUCCESS;
}
出力:
83; 86; 77; 15; 93; 35; 86; 92; 49; 21;
62; 27; 90; 59; 63; 26; 40; 26; 72; 36;
11; 68; 67; 29; 82; 30; 62; 23; 67; 35;
29; 2; 22; 58; 69; 67; 93; 56; 11; 42;
29; 73; 21; 19; 84; 37; 98; 24; 15; 70;
13; 26; 91; 80; 56; 73; 62; 70; 96; 81;
5; 25; 84; 27; 36; 5; 46; 29; 13; 57;
24; 95; 82; 45; 14; 67; 34; 64; 43; 50;
87; 8; 76; 78; 88; 84; 3; 51; 54; 99;
32; 60; 76; 68; 39; 12; 26; 86; 94; 39;
C++ で std::vector
を使用してベクトルの配列を宣言する
または、std::vector
コンテナを使用して、ベクトルの可変配列を宣言することもできます。次のコードスニペットは、整数の 4 行 4 列の行列の宣言と初期化を示しています。コンストラクターの 2 番目の引数は、要素をゼロに初期化する別のベクトル
コンストラクターであることに注意してください。オブジェクトの要素には、同じ arr[x][y]
表記を使用してアクセスできます。プラス面として、行と列は、std::vector
コンテナの組み込み関数を使用して動的に拡張できます。
#include <iomanip>
#include <iostream>
#include <vector>
using std::array;
using std::cout;
using std::endl;
using std::setw;
using std::vector;
constexpr int LENGTH = 4;
constexpr int WIDTH = 4;
int main() {
vector<vector<int>> vector_2d(LENGTH, vector<int>(WIDTH, 0));
vector_2d[2][2] = 12;
cout << vector_2d[2][2] << endl;
vector_2d.at(3).at(3) = 99;
cout << vector_2d[3][3] << endl;
cout << endl;
return EXIT_SUCCESS;
}
出力:
12
99
ベクトルのベクトルを介した反復は、2 レベルのネストされた範囲
ベースのループを使用して実行できます。アクセス要素のエイリアス名は、内側の for
ループのベクトル要素であることに注意してください。
#include <iomanip>
#include <iostream>
#include <vector>
using std::array;
using std::cout;
using std::endl;
using std::setw;
using std::vector;
constexpr int LENGTH = 4;
constexpr int WIDTH = 4;
int main() {
vector<vector<int>> vector_2d(LENGTH, vector<int>(WIDTH, 0));
std::srand(std::time(nullptr));
for (auto &item : vector_2d) {
for (auto &i : item) {
i = rand() % 100;
cout << setw(2) << i << "; ";
}
cout << endl;
}
cout << endl;
for (auto &item : vector_2d) {
for (auto &i : item) {
i *= 3;
}
}
for (auto &item : vector_2d) {
for (auto &i : item) {
cout << setw(3) << i << "; ";
}
cout << endl;
}
return EXIT_SUCCESS;
}
出力:
62; 85; 69; 73;
22; 55; 79; 89;
26; 89; 44; 66;
32; 40; 64; 32;
186; 255; 207; 219;
66; 165; 237; 267;
78; 267; 132; 198;
96; 120; 192; 96;
著者: 胡金庫