vector_CBV.cpp

vector_CBR.cpp


配列

C++ では “変数の集合” を扱う方法がいくつかある。最もシンプルなのが配列

double a[3]; // double 型の 3 成分配列
a[0] = 1; // C のインデックスは "0" から
a[1] = 2;
a[2] = 3; 

double a[3] = {0,1,2}; // でも OK

double a[3][2]; // double 型の 3 * 2 行列
a[0][0] = 1;
a[0][1] = 2;
a[1][0] = 3;
a[1][1] = 4;
a[2][0] = 5;
a[2][1] = 6;

double a[3][2] = {{1,2},{3,4},{5,6}} // でも OK

配列は宣言後に長さを変えられないし、長さに変数を用いることも (基本的には) できない

int i = 2;
double a[i] = {1,2}; // こういうことはできない

int i = 2;
double a[i];
a[0] = 1;
a[1] = 2; // これはコンパイラによってはできる

また配列をそのまま値渡しすることはできない。しかし実は配列はポインタと (ほぼ) 同じ概念である

void f(double *a);

int main() {
	...
	double a[2] = {1,2};
	f(a);
	...
} 

Untitled

double a[2] = {1,2};
cout << a << ' ' << a[0] << ' ' << a[1] << endl;

とすると

0x7ffeebe36630 1 2

多次元配列のポインタ渡しは以下のよう

void f(double a[][2]); // 2つ目以降のインデックスの長さは指定しなければならない

int main() {
	...
	double a[3][2] = {{1,2},{3,4},{5,6}};
	f(a);
	...
} 

2つ目以降のインデックスの長さを指定しないとどこで “折り返す” かわからない

2つ目以降のインデックスの長さを指定しないとどこで “折り返す” かわからない

ちなみに参照渡しなら全ての長さを指定しなければならない

void f(double &a[3][2]);

int main() {
	...
	double a[3][2] = {{1,2},{3,4},{5,6}}:
	f(a);
	...
}