首先,这不是功课。我正在使用我为自己买的一本书来学习家里的C ++的开头,它包含了一个我坚持的练习。它问我下面的代码有什么问题,但我不确定我是否正确地查看它。
这些是练习和代码:
假设得分是一个包含int类型元素的向量, 以下代码片段有什么问题(意味着增加每个代码片段) 元件)?
vector<int>::iterator iter; for (iter = scores.begin(); iter != scores.end(); ++iter) { iter++; }
我的猜测是'iter ++'被注入for函数和for块,这意味着它将被注入两次,因此将超过循环的结束。这是对的吗?
答案 0 :(得分:3)
你是对的。这段代码的问题是迭代器在循环内递增,也在循环体执行之后递增。
代码应该做的是增加存储在循环内迭代器位置的值,所以我们需要取消引用它。
(*iter)++
答案 1 :(得分:1)
它有时会传递数组的结尾,是的。
如果有偶数个元素,那么你很幸运,因为它会达到停止状态。对于奇数个元素,您正在调用UB。
答案 2 :(得分:0)
iter++
与std::advance(iter,1)
相同,并将迭代器向前移动以指向下一个向量元素。这与++iter
相同。
您想要访问iter
指向的元素:使用operator*
访问它:
++*iter; // or
(*iter)++;
请注意,在您的原始帖子中,如果您的向量中有奇数个项目,您的循环可能永远不会结束。