如何解决C ++,如果放在表达式*v.begin+ i / 10++后面,为什么迭代器上的++运算符不起作用?
此练习摘自Primer book(C ++):
让我们假设我们拥有一个范围从0到100的等级。我们要计算10个等级中有多少个等级。在0到100之间,可能有101个等级。这些等级可以由11个簇表示:10个簇,每个10个等级,再加上一个簇,满分为100。第一个簇的得分为0到9,第二个簇的得分为10到19,依此类推。最终的簇计算获得了100分的得分。
如果我们的输入是
,则以这种方式汇总成绩42 65 95 100 39 67 95 76 88 76 83 92 76 93
那么输出应该是
0 0 0 1 1 0 2 3 2 4 1
int main()
{
vector<int> v(11,0);
int i;
while (cin >> i)
{
++*(v.begin() + i / 10);
}
for (auto& r : v)
{
cout << r << '\t';
}
cout << endl;
return 0;
}
如果是行
++*(v.begin() + i / 10);
更改为
*(v.begin() + i / 10)++;
程序不读取向量。为什么?
解决方法
在表达式++*(v.begin() + i / 10);
中,begin()
迭代器首先递增i / 10
,然后对所得的迭代器进行解引用,然后递增所引用的int
。
但是在表达式*(v.begin() + i / 10)++;
中,begin()
迭代器首先增加i / 10
,与上面相同。但是由于Operator Precedence,++
运算符比*
运算符具有更高的优先级,因此生成的迭代器先递增,然后取消引用。所指的int
保持不变。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。