vector<int> v(1, 1);
it = v.begin();
为什么*it++
在第一个元素上没有加一个?
虽然我可以使用*it = *it + 1
我多年没有使用C++
答案 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 ++()完成之前返回迭代器的值。