循环范围在使用索引元素时不起作用

Range for loop doesn't work when operating with an indexed element

本文关键字:元素 不起作用 索引 范围 循环      更新时间:2023-10-16

我不确定如何构建标题,但解释更简单。我正在玩c++11范围for循环(链接)。

我写了以下内容:

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

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

另一方面,这是有效的:

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

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

实际上它工作得很好,除了,在您的示例中,vec[0]在第一次运行后已更改为1,这使得剩余的运行看起来像"不工作"(如果除以1,保持相同的值)。

您将通过使用以下示例清楚地看到它(将"as expected"):

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}