aat*_*ish 2 c++ for-loop auto c++11
我不确定如何构建标题,但解释更简单.我正在使用c ++ 11 range for loops(链接).
我写了以下内容:
for(auto &elem:vec){
elem/=vec[0];
}
Run Code Online (Sandbox Code Playgroud)
哪个编译但不会改变向量'vec'中的任何内容.
另一方面,这有效:
elem0 = vec[0];
for(auto &elem:vec){
elem/=elem0;
}
Run Code Online (Sandbox Code Playgroud)
这是预期的吗?第一种方法有什么问题?如果有帮助,我的编译器版本是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}
Run Code Online (Sandbox Code Playgroud)