30項 出力先範囲の大きさを確認しよう

出力先範囲の大きさを確認しよう



次のコードは実行時に失敗します。

int transmogrify(int x);

vector<int> v, results;

... // vに要素を追加する

transform(v.begin(), v.end(), results.end(), transmogrify);

transformの出力先が"results.end()"になっているので、存在しない要素に書き込むことになりエラーになります。


back_inserterを使えば末尾に出力できます。

int transmogrify(int x);

vector<int> v, results;

... // vに要素を追加する

transform(v.begin(), v.end(), back_inserter(results), transmogrify);

back_inserterが返す反復子に要素を追加するとき、push_backが呼び出され、末尾に要素が追加されます。
front_inserterを使えばpush_frontで、inserterを使えばinsertで要素が追加されます。