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;
}
您可以在其中看到它在 operator++() 完成之前返回迭代器的值。