ツナドーナツ・技術メモ帳

色々なものを作る過程で分からなかったことなどを書いていきます

resizeの挙動を勘違いしていた

まずはソースコードを見てください

#include <iostream>
#include <vector>

int main() {
	std::vector<unsigned char> v;

	v.resize(100);
	v.push_back(39);//ミク

	std::cout << "v.size() = " << v.size() << std::endl;

	return 0;
}

これを実行するとこうなります。
f:id:iwanax:20180620093341j:plain


vector変数vをresizeして、変数のサイズを表示するプログラムです。

僕はresize関数は指定した大きさの容量を確保してくれる関数だと思っていました。なので、vのサイズが1になると思っていました。
しかし、実際は「容量」の確保ではなく「要素数」を確保してくれる関数です。

容量と要素数の説明を簡単にすると、
容量:std::vector v[100]; メモリだけ確保
素数:std::vector v[100] = {1, 2, 3, .... , 99, 100}; 配列に格納されている要素の数
みたいな感じです。

なので、容量を確保したいならreserve関数を使わないといけません。もしくは添え字を使って代入していくしかないです。
関数名で挙動を想像するとこういう痛い目をみるので、これからは調べてやるようにします。