我不确定如何构建标题,但解释更简单。 我正在使用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。
答案 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}