C++ 中的迭代器

Iterators in c++

本文关键字:迭代器 C++      更新时间:2023-10-16
vector<int> v(1, 1);
it = v.begin();

为什么*it++没有在第一个元素上加一?

虽然我可以使用*it = *it + 1

我已经很多年没有使用C++

++ 的优先级高于 *。

因此,第一个迭代器指向下一个元素,然后使用 * 取消引用,您可以在左侧收集 v[1]。

使用下面的代码来解决问题。

#include<iostream>
using namespace std;
int main()
{
vector<int> v(2, 1);
vector<int>::iterator it;
it = v.begin();
(*it)++; //instead of *it++;
cout << v[0] <<  v[1] << endl;
}

因为*it++意味着后递增it并取消引用结果(it的原始值),因为++绑定得更紧(相当于*(it++))。它不会修改 *it 处的内容。如果要递增*it,请使用 (*it)++

正如其他人所解释的那样

int x = *it++;

相当于

int x = (*it)++;

相当于

int x = *it;
it = ++it; // prefix  

直到分号之后才递增(因为它是后缀运算符)。posfix ++ 运算符通常使用前缀运算符实现,如下所示

template<typename T> vector<T>::iterator vector<typename T>::iterator::operator++(int)
{
   vector<T>::iterator tmp(*this);
   ++(*this); // call prefix operator++()
   return tmp;   
}

在这里你可以看到它在运算符++()完成之前返回迭代器的值。