4

私はacceleratedc++と呼ばれるこの本を読んでいます。以下に示す「コピー」の場合

// error - no element at ret.end() 
copy(bottom.begin(), bottom.end(), ret.end());

この本では、3番目の引数としてret.end()を使用するのは静かではないと述べられていますが、ret.end()は、「ret」コンテナの最後の要素を1つ過ぎたイテレータを返します。代わりに「back_inserter(ret)」を使用することを提案していますが、なぜそうなのですか?

4

1 に答える 1

8

の問題ret.endは、コンテナの終わりを過ぎたところを指しているにもかかわらず、メモリ内のその場所またはそれを超えて何も割り当てられていない可能性があることです。プログラムに割り当てられていないメモリ位置への書き込みは未定義の動作であるため、実際にはを使用する必要がありますback_inserter

于 2012-07-24T18:13:32.313 に答える