用矢量代码片段练习,包括for循环

时间:2012-02-29 14:38:40

标签: c++ vector for-loop

首先,这不是功课。我正在使用我为自己买的一本书来学习家里的C ++的开头,它包含了一个我坚持的练习。它问我下面的代码有什么问题,但我不确定我是否正确地查看它。

这些是练习和代码:

  

假设得分是一个包含int类型元素的向量,   以下代码片段有什么问题(意味着增加每个代码片段)   元件)?

vector<int>::iterator iter;
for (iter = scores.begin(); iter != scores.end(); ++iter)
{
  iter++;
}

我的猜测是'iter ++'被注入for函数和for块,这意味着它将被注入两次,因此将超过循环的结束。这是对的吗?

3 个答案:

答案 0 :(得分:3)

你是对的。这段代码的问题是迭代器在循环内递增,也在循环体执行之后递增。

代码应该做的是增加存储在循环内迭代器位置的值,所以我们需要取消引用它。

(*iter)++

答案 1 :(得分:1)

它有时会传递数组的结尾,是的。

如果有偶数个元素,那么你很幸运,因为它会达到停止状态。对于奇数个元素,您正在调用UB。

答案 2 :(得分:0)

iter++std::advance(iter,1)相同,并将迭代器向前移动以指向下一个向量元素。这与++iter相同。

您想要访问iter指向的元素:使用operator*访问它:

++*iter; // or
(*iter)++;

请注意,在您的原始帖子中,如果您的向量中有奇数个项目,您的循环可能永远不会结束。