Abh*_*ane 11 c++ iterator stl list
给定一个std::list名为 的迭代器it,it1++相当于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)
回复: "it1++相当于it1=it1+1\xe2\x80\x9d ——事实并非如此。对于内置数字类型来说确实如此,但是一旦重载运算符发挥作用,它们之间就没有内在联系了的迭代器std::list是前向迭代器;它们没有operator+,但有operator++。
编辑、阐述:
\n向前迭代器让\xe2\x80\x99s你按序列向前移动。为此,它提供了 , 的两个重载operator++,以便您可以编写it++和++it。std::forward_list提供前向迭代器。
双向迭代器让您按顺序向前和向后移动。除了前向迭代器提供的操作之外,它还提供了 , 的两个重载operator--,以便您可以编写it--和--it。std::list提供双向迭代器。
随机访问迭代器让您移动到序列中的任意位置。除了双向迭代器提供的此操作之外,它还提供了重载,operator+以便您可以编写it + 3. 它还提供了重载,operator[]因此it[n]相当于*(it + n). std::vector提供随机访问迭代器。
| 归档时间: |
|
| 查看次数: |
330 次 |
| 最近记录: |