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で要素が追加されます。