質問

I was not sure how to frame the title but the explanation is simpler. I was playing with the c++11 range for loops (link).

I wrote the following:

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

Which compiles but does not change anything in the vector 'vec'.

This, on the other hand, works:

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

Is this expected? What is wrong with the first method? If it helps, my compiler version is g++ 4.6.3.

役に立ちましたか?

解決

Actually it works just fine except that, in your example, vec[0] has been changed to 1 after the first run, which makes the remaining runs look like "not working" (remain the same value if divided by 1).

You will see it clearly by using the following example (will work "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}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top