KMDのプログラミングメモノート

主にUnity(C#)を中心としたプログラムの備忘録

C++ 可変長配列vectorを使ってみる





1次元配列について

宣言と初期化

可変長の1次元配列の宣言は

std::vector<型名> 変数名;

というようにできます。

また、宣言と同時に初期化をすることも可能です。通常の配列の様に

//中身が{3, 4, 2}の可変長配列
std::vector<int> intVec{ 3, 4, 2 };

と宣言することができます。

また、要素をすべて同じNで初期化(全て0にするなど)の場合は(要素数, N)と初期化することもできます。

//中身が{0, 0, 0}の可変長配列
std::vector<int> zeroVec(3, 0);



要素の追加

「可変長」とついているので要素を追加することが可能です。追加する場合は「変数名.push_back(追加したい要素)」とすることで末尾に要素を追加することが可能です。


for文でループする(プログラム例)

vectorは「変数名.size()」とすることで配列の大きさを簡単に取得ができます。
これを利用すれば配列に対するfor文が容易に実装できます。

#include<iostream>
#include<vector>

int main() {
	//中身が{3, 4, 2}の可変長配列
	std::vector<int> intVec{ 3, 4,2 };

	//配列のサイズを取得
	std::cout << "配列のサイズ:" << intVec.size() << std::endl;

	//中身を列挙
	for (int i = 0; i < intVec.size(); i++) {
		printf("intVec[%d] = %d\n", i, intVec[i]);
	}

	//末尾に7を追加
	std::cout << "\n末尾に7を追加" << std::endl;
	intVec.push_back(7);

	//配列のサイズを取得
	std::cout << "配列のサイズ:" << intVec.size() << std::endl;

	//中身を列挙
	for (int i = 0; i < intVec.size(); i++) {
		printf("intVec[%d] = %d\n", i, intVec[i]);
	}
}


実行結果

配列のサイズ:3
intVec[0] = 3
intVec[1] = 4
intVec[2] = 2

末尾に7を追加
配列のサイズ:4
intVec[0] = 3
intVec[1] = 4
intVec[2] = 2
intVec[3] = 7





2次元配列について

宣言と初期化

2次元配列となると宣言が少し複雑になり、

std::vector<std::vector<型名>> 変数名;

と宣言します。

1次元配列と同様の初期化が可能であり、通常の配列の様にする場合は、

std::vector<std::vector<int>> intVec2{ {3, 2}, {1, 9} };

と宣言し、要素をすべて同じ0で初期化する場合は、

//3行2列の零行列
std::vector<std::vector<int>> zeroVec2(3, std::vector<int>(2, 0));

とします。


for文でのループ

2次元の可変長配列vecを行列として考えると

  • vec.size()で行数
  • vec[0].size()で列数

を取得できるので、これを利用すれば2次元の可変長配列に対しても簡単にfor文を実装できます。

#include<iostream>
#include<vector>

int main() {
	//2次元の可変長配列
	std::vector<std::vector<int>> intVec2{ {1, 2}, {3, 4}, {5, 6} };

	//2行2列の零行列
	std::vector<std::vector<int>> zeroVec2(2, std::vector<int>(2, 0));

	//配列のサイズを取得
	printf("%d%d列の行列\n", intVec2.size(), intVec2[0].size());

	//中身を列挙
	for (int i = 0; i < intVec2.size(); i++) {
		for (int j = 0; j < intVec2[0].size(); j++) {
			std::cout << intVec2[i][j] << ", ";
		}
		puts("");
	}
}



32列の行列
1, 2,
3, 4,
5, 6,