附加到容器

piy*_*ukr 2 c++ algorithm

我对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)

才不是.这两个陈述有不同的含义吗?

Kon*_*lph 5

检查语句的作用 - 不涉及任何魔法.特别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引用,并在取消引用并分配给它时调用.