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

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

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

C++好几年没用了

4

3 回答 3

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;
}
于 2012-09-28T04:53:29.523 回答
0

因为*it++意味着后增量it和取消引用结果(的原始值it),因为++绑定更紧密(它相当于*(it++))。它不会修改*it. 如果要增加*it,请使用(*it)++.

于 2012-09-28T04:39:18.053 回答
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++() 完成之前返回迭代器的值。

于 2014-01-02T16:08:19.197 回答