簡體   English   中英

為什么我的向量中的項目在C ++中的for-each循環期間不會發生變化?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM