为什么 `it1++` 有效,但 `it1=it1+1` 无效,其中 it1 是列表容器的迭代器

Abh*_*ane 11 c++ iterator stl list

给定一个std::list名为 的迭代器itit1++相当于it1=it1+1。那么为什么it1++工作正常,但it1=it1+1在下面的代码中却出现错误呢?

代码

#include <iostream>
#include <list>

int main()
{
    std::list<int> l1{19, 2, 3, 21, 5, 19, 7, 11};
    std::list<int>::iterator it1;

    std::cout << "1st\n";
    it1 = l1.begin();
    it1++;
    it1 = it1 + 1; // This giving error
}
Run Code Online (Sandbox Code Playgroud)

输出

Invalid operands to binary expression
 ('std::list<int>::iterator' (aka '_List_iterator<int>') and 'int')
Run Code Online (Sandbox Code Playgroud)

Pet*_*ker 8

回复: "it1++相当于it1=it1+1\xe2\x80\x9d ——事实并非如此。对于内置数字类型来说确实如此,但是一旦重载运算符发挥作用,它们之间就没有内在联系了的迭代器std::list前向迭代器;它们没有operator+,但有operator++

\n

编辑、阐述:

\n

向前迭代器让\xe2\x80\x99s你按序列向前移动。为此,它提供了 , 的两个重载operator++,以便您可以编写it++++itstd::forward_list提供前向迭代器。

\n

双向迭代器让您按顺序向前和向后移动。除了前向迭代器提供的操作之外,它还提供了 , 的两个重载operator--,以便您可以编写it----itstd::list提供双向迭代器。

\n

随机访问迭代器让您移动到序列中的任意位置。除了双向迭代器提供的此操作之外,它还提供了重载,operator+以便您可以编写it + 3. 它还提供了重载,operator[]因此it[n]相当于*(it + n). std::vector提供随机访问迭代器。

\n