附加到容器上

Appending to a container

本文关键字:      更新时间:2023-10-16

我对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 标准;但它提出了一个要做的界面截然不同的东西。)

相关文章:
  • 没有找到相关文章