澄清迭代器上的后缀/前缀运算符

时间:2014-01-31 19:58:50

标签: c++

Accelerated C++ Andrew Koenig之后,他编写了以下代码以介绍模板和通用函数。此代码是否跳过容器中的第一个元素?或者它在递增之前复制第一个迭代器对象:

template<class In, class Out>
Out copy(In begin, In end, Out dest)
{
while (begin != end)
    *dest++ = *begin++;
return dest;
}

换句话说,这是否与他的代码一样?:

template<class In, class Out>
Out copy(In begin, In end, Out dest)
{
while (begin != end)
    *dest = *begin;
    dest++;  begin++;
return dest;
}

1 个答案:

答案 0 :(得分:1)

增加一个迭代器(或其他任何事情)可能会让人感到困惑,但它正在做的事情非常简单。它复制值,增加原始值,然后返回副本。所以用“* dest ++”引用的位置与“* dest”相同,唯一的区别是在语句完成后,dest现在将引用iteratable中的下一个迭代。

当程序员在同一个表达式中重复使用递增变量时,会出现唯一的问题。 (通常只用作脑筋急转弯,由此产生的效果因语言而异)