c ++中的迭代器

时间:2012-09-28 04:37:07

标签: c++ stl iterator

vector<int> v(1, 1);
it = v.begin();

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

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

我多年没有使用C++

3 个答案:

答案 0 :(得分:4)

++的优先级高于*。

因此,首先使迭代器指向下一个元素,然后使用*取消引用,您可以在左侧收集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;
}

答案 1 :(得分:0)

因为*it++意味着后递增it并取消引用结果(it的原始值),因为++更严格地绑定(它等同于*(it++) )。它不会修改*it处的内容。如果您想增加*it,请使用(*it)++

答案 2 :(得分:0)

正如其他人所解释的那样

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;   
}

你可以看到它在operator ++()完成之前返回迭代器的值。