[英]Why won't the items in my vector change during for-each loop in C++?
我是C ++的新手,通常是Java代碼。 我很難理解C ++中的容器是如何與我在Java中習慣的相同和不同。
對於我現在正在做的項目,我已經創建了自己的數據結構,稱為solar_body。 其中每個都包含名稱,質量,半徑和3個數據結構,稱為position_t,velocity_t和acceleration_t。 希望這些名稱是自我解釋的。
我正在使用向量來保存程序中solar_body對象的集合。 我似乎發現了一個問題,使用我從Java中知道的for-each循環,希望有人可以解釋發生了什么。
我在向量上運行一個循環,調用每個對象上的update方法(solar_body.update())。 這將根據該迭代的當前加速度計算新的速度和位置。 當我第一次設置它時,我像這樣做了我的for循環:
for (solar_body body: bodies) {
body.update(); }
當我這樣做並打印變量時,速度和位置會更新。 但是,在我的下一個while循環迭代期間,新值將消失,並且它們將返回到相同的舊值。 似乎for-each循環在solar_body對象的副本上運行,而不是原始對象。
出於好奇,我將for循環更改為:
for (int i=0; i<bodies.size(); i++) {
bodies.at(i).update(); }
這是我所期望的。 在Java中,使用這兩個循環的實踐確實沒有區別。 在這種情況下發生了什么,我不明白?
在此先感謝您的幫助。
for (solar_body body : bodies)
這按值迭代; 也就是說,它創建的元素的副本bodies
,並將其放置在body
的迭代的持續時間。 然后它繼續下一個元素,依此類推。 要通過引用進行迭代,以便您可以修改元素,您需要以下內容:
for (solar_body& body : bodies)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.