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; }
これを実行するとこうなります。
vector変数vをresizeして、変数のサイズを表示するプログラムです。
僕はresize関数は指定した大きさの容量を確保してくれる関数だと思っていました。なので、vのサイズが1になると思っていました。
しかし、実際は「容量」の確保ではなく「要素数」を確保してくれる関数です。
容量と要素数の説明を簡単にすると、
容量:std::vector
要素数:std::vector
みたいな感じです。
なので、容量を確保したいならreserve関数を使わないといけません。もしくは添え字を使って代入していくしかないです。
関数名で挙動を想像するとこういう痛い目をみるので、これからは調べてやるようにします。