我正在读这本名为“加速c ++”的书。对于“复制”,如下所示
// error - no element at ret.end()
copy(bottom.begin(), bottom.end(), ret.end());
书中提到使用ret.end()作为第三个参数并不安静。但是ret.end()返回一个超过'ret'容器的最后一个元素的迭代器。什么是这个论点有问题吗?他们建议改用'back_inserter(ret)'。为什么会这样?
答案 0 :(得分:8)
ret.end
的问题在于,尽管它指向容器末尾的一个,但在内存中可能没有在该位置或之外分配任何内容。由于写入尚未分配给程序的内存位置是未定义的行为,因此您应该使用back_inserter
。