C++ C++;,为什么++;迭代器上的运算符不';t work,如果放在表达式*(v.begin()和#x2B;i/10)和#x2B+;?

C++ C++;,为什么++;迭代器上的运算符不';t work,如果放在表达式*(v.begin()和#x2B;i/10)和#x2B+;?,c++,iterator,C++,Iterator,本练习来自初级读物(C++): 假设我们有一个从0到100的等级集合。我们想数一数有多少个年级分成10个不同的组。在0到100之间有101个可能的等级。这些等级可以由11个组来表示:10个组,每个组10个等级加上一个组,满分为100分。第一个集群将计算从0到9的等级,第二个集群将计算从10到19的等级,依此类推。最后一组统计得到100分的分数 如果我们的输入是 42659510039679576887683927693 那么输出应该是 0 0 1 0 2 3 2 4 1 intmain() {

本练习来自初级读物(C++):

假设我们有一个从0到100的等级集合。我们想数一数有多少个年级分成10个不同的组。在0到100之间有101个可能的等级。这些等级可以由11个组来表示:10个组,每个组10个等级加上一个组,满分为100分。第一个集群将计算从0到9的等级,第二个集群将计算从10到19的等级,依此类推。最后一组统计得到100分的分数

如果我们的输入是

42659510039679576887683927693

那么输出应该是

0 0 1 0 2 3 2 4 1

intmain()
{
向量v(11,0);
int i;
while(cin>>i)
{
++*(v.begin()+i/10);
}
用于(自动和r:v)
{

cout在表达式
++*(v.begin()+i/10);
中,
begin()
迭代器首先递增
i/10
,然后解引用结果迭代器,然后递增所引用的
int


但是在表达式
*(v.begin()+i/10)+;
中,
begin()
迭代器首先递增
i/10
,如上所述。但由于,
++
运算符的优先级高于
*
运算符,因此结果迭代器递增,然后取消引用。引用的
int
保持不变。

查找要计算的运算符先放一边:为什么不简化迭代器的运算,省去迭代器的运算。只需考虑一下
++*it
vs
(*it)+
vs
*(it++)
编写这样的代码只会让你自己感到困惑。编译器会机械地按照规则进行解释。它可以自由添加额外的变量,仅用于可读性,例如
int scaled\u score=i/10
。编译器不需要为此分配额外的内存。这两个版本都不可读,因此最好在ca中重构这一行se with'(v.begin()+i/10)+;'如果'i'是55,迭代器增加到5,那么'++'运算符使其为6,然后''运算符取消对第6个元素的引用,而不做任何更改……我在编写时得到了它,谢谢)
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;
}