vectorをinsertしようとしたらabortしたから原因と直し方
vector結合しようとしたらabortした
abortっていうのはwhat(): vector::_M_range_insert
ってのが出てくるやつです
これが起こるときの例はこちらです
class Test{ private: vector<int> v; public: ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ コンストラクタとか ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ vector<int> getVector(); }; int main(void){ Test t; vector<int> v2; ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ Testのvとv2は適当に初期化 ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ v2.insert(v2.end, t.getVector().begin(), t.getVector().end()); return 0; }
こんな感じです
〜〜〜〜で区切ってるところは中略と思ってください
t.getVector()とやった時に返ってくる値は、vのコピーであるため、
一回目と二回目のt.getVector()は違うものです!!!
内容は同じかもしれないけれど、begin()、end()が変わってきます!!!
ならどうすればいいのか?
コピーが返ってくるならコピーを返さなければいいじゃない
ということです!
つまり、
//before vector<int> getVector(); //after const vector<int>& getVector();
でいいです