我不确定标题的框架,但解释比较简单。
我正在使用c++ 11循环范围(link)。

我写了以下内容:

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

哪个编译但不改变 vector “vec”中的任何内容。

另一方面,这可以工作:
elem0 = vec[0];
for(auto &elem:vec){
    elem/=elem0;
}

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

最佳答案

实际上,它工作得很好,只是在您的示例中,在第一次运行之后vec[0]已更改为1,这使其余运行看起来像“不起作用”(如果除以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}

关于c++ - 使用索引元素进行操作时,循环范围无效,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23502311/

10-11 22:55
查看更多