附加到容器上
Appending to a container
我对C 中的通用算法copy
有疑问。
从目标容器ret
和源容器bottom
,
copy(bottom.begin(), bottom.end(), back_inserter(ret));
有效,但
copy(bottom.begin(), bottom.end(), ret.end());
没有。这两个陈述是否具有不同的含义?
检查陈述所做的事情 - 不涉及魔法。特别是,copy
(本质上)只是一个循环。简化:
template <typename I>
void copy(I begin, I end, I target) {
while (begin != end)
*target++ = *begin++;
}
和 back_inserter
确实做了名字所说的。
因此,实际上,没有 back_inserter
您不会扩展目标容器,您只需在其末端编写:迭代器不会更改其底层容器。另一方面,back_inserter
函数创建了一个专门的迭代器, do 保留对其原始容器的引用,并在取消并分配给它时调用push_back
。
在第一个中,您要给您复制一种插入方法,以及从什么容器中插入的。
在第二个中,您只给了一个指针到容器末端。
两个都返回迭代器,但是...
ret.end()
返回指向末尾的迭代器容器。它可以减少,但不会增加(因为它已经指向序列的结尾),它不能除非降低(再次,因为它指向)序列结束的一个过去)。
back_inserter(ret)
是返回的函数back_insertion_iterator
,这是非常特殊的类型"迭代器"(类别输出标准仪):这是增量函数是无效的,删除它返回*this
,并且为其分配一个值类型,调用push_back
容器。(换句话说,它根本不是迭代器,除了对于C 标准;但它提出了一个要做的界面截然不同的东西。)
相关文章:
- 没有找到相关文章