2014-05-06 53 views
2

我不確定如何構造標題,但解釋更簡單。 我正在玩C++ 11範圍for循環(link)。使用索引元素操作時,循環範圍不起作用

我寫了下面:

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

哪個編譯,但不會改變矢量「VEC」任何東西。

此,在另一方面,工作原理:

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

這個預期?第一種方法有什麼問題?如果有幫助,我的編譯器版本是g ++ 4.6.3。

+0

'爲(自動&ELEM:VEC)'是我所見過的應用到最奇怪的格式這個語法。爲什麼不像'他們在標準中那樣'(for auto&elem:vec)? – TemplateRex

回答

5

其實它的工作原理,只是就好了,在你的榜樣,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} 
+0

爲什麼我沒有想到這一點。謝謝。這回答了我的問題。 – aatish