STLを使っていて,やってしまったミスを記録していきます.
アルゴリズムを使っていてやってしまったミス.
下のようなコード*1を書いた時
なぜか思ったように文字列がコピーされません.
string Str; char Source[]="hoge"; copy(Source, Source+4, Str.begin()); cout << Str << endl; //何も出力されない
最初,何が悪いのかさっぱり分かりませんでした.
しばらく悩んだ後,stringのメンバを見てみると,困った事にsizeが0のままです.
そこで,resize(4)をコピーの前に加えてみるとうまく動きました.
string Str; char Source[]="hoge"; Str.resize(4); //resize copy(Source, Source+4, Str.begin()); cout << Str << endl; //出力される
このようなイテレータで要素を加えていくアルゴリズムの場合
copyに限らず移動先の要素数が,加える要素数よりも少ないと意図した動作になりません.
わざわざresizeするのがめんどくさい場合は,inserterを使う事で解決する事もできます.
string Str; char Source[]="hoge"; copy(Source, Source+4, back_inserter(Str)); //inserter cout << Str << endl; //出力される return 0;
inserterを使うことで,要素を追加する際ににpush_back等のメソッドで追加してくれます.