4

我正在阅读这本名为加速 C++ 的书。对于下面显示的“复制”

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

书中提到,使用 ret.end() 作为第三个参数并不是绝对正确的。但是 ret.end() 会返回一个迭代器,用于 'ret' 容器的最后一个元素。有什么问题这个论点?他们建议改用'back_inserter(ret)'。为什么会这样?

4

1 回答 1

8

问题ret.end在于,尽管它指向容器末尾之后的位置,但在内存中的该位置或该位置之外可能没有分配任何内容。由于写入尚未分配给程序的内存位置是未定义的行为,因此您确实应该使用back_inserter.

于 2012-07-24T18:13:32.313 回答