光学設計とその周辺、そしてたまに全く関係ないやつ

学んだことを書き留めていきたいと思いますが、ありふれたことを書いても人類の進歩に貢献しないので、専門的な事柄をメインにしたいと思います。なお私の専門とは光学設計とか画像処理とかです。

std::vectorで2次元の配列を定義するときは、vector<Type> v(n, d)としてはいけないという話

C++のstd::vectorを使って例えば2次元のint型の動的配列を定義するとき、vector<int> v(n, m)ではなくvectorvector<int>> vv(n, vector<int>(m))としないといけないぞ、ということです。
vector v(n, m)はあくまでmの値で初期化したn個の要素数をもつ配列vを作るという内容です。

なぜわざわざこんなことを言ったかというと、 最近あまりトピックがないから、 vector v(n, m)と定義した場合、v[i,k]みたいにあたかも2次元配列の要素へのアクセスみたいなことができ、それにちょっとはまったからです。

例えば以下のようなコードを実行してもエラーにはならない。

vector<int> VectorSample(2, 2);
for (int i = 0; i < 2; ++i)
{
	for (int j = 0; j < 2; ++j)
	{
		std::cout << VectorSample[i,j] << std::endl;
	}
}

結果は

2
2
2
2

となる。この場合のjの意味をちょっと調べたがよくわからず、、、