我对copyC++中的通用算法有疑问.
要从目标容器ret和源容器进行复制bottom,
copy(bottom.begin(), bottom.end(), back_inserter(ret));
Run Code Online (Sandbox Code Playgroud)
工作,但
copy(bottom.begin(), bottom.end(), ret.end());
Run Code Online (Sandbox Code Playgroud)
才不是.这两个陈述有不同的含义吗?
检查语句的作用 - 不涉及任何魔法.特别copy是(基本上)只是一个循环.简化:
template <typename I>
void copy(I begin, I end, I target) {
while (begin != end)
*target++ = *begin++;
}
Run Code Online (Sandbox Code Playgroud)
并且back_inserter真正做到了名字所说的.
因此,实际上,没有了back_inserter你不扩大目标容器,你只写过去的结束:迭代不改变其基本的容器.back_inserter另一方面,该函数创建一个专用迭代器,它确实保存对其原始容器的push_back引用,并在取消引用并分配给它时调用.