使用索引元素进行操作时,循环范围不起作用

时间:2014-05-06 18:32:59

标签: c++ c++11 for-loop auto

我不确定如何构建标题,但解释更简单。 我正在使用c ++ 11 range for loops(link)。

我写了以下内容:

for(auto &elem:vec){
    elem/=vec[0];
}

编辑但不改变向量中的任何内容' vec'。

另一方面,这有效:

elem0 = vec[0];
for(auto &elem:vec){
    elem/=elem0;
}

这是预期的吗?第一种方法有什么问题?如果有帮助,我的编译器版本是g ++ 4.6.3。

1 个答案:

答案 0 :(得分:5)

实际上它的工作正常,但在您的示例中,vec[0]在第一次运行后已更改为1,这使得剩余的运行看起来像“not working”(如果除以1,则保持相同的值)。

您将通过使用以下示例清楚地看到它(将按预期工作):

vector<float> vec = { 1, 2, 3, 4, 5 };
for (auto &elem : vec){
    elem /= vec[4];
}

// now vec={0.2, 0.4, 0.6, 0.8, 1.0}