簡體   English   中英

我的range-for循環出現邏輯錯誤

[英]Logic error with my range-for loop

我正在學習C ++作為初學者(我在2個月前開始)並且我的簡單代碼存在問題。 我試圖將此向量中每個元素的值設置為0但我無法理解為什么它不起作用:

vector<int> numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 

for (int x : numbers) x = 0; 

我知道我可能聽起來很愚蠢,但我是初學者。 如果我嘗試使用傳統的for循環來做同樣的事情,那么為什么呢?

for (int& x : numbers) x = 0; 

為了改變容器元素,必須使用范圍循環迭代變量的引用(默認情況下,迭代變量是當前迭代元素的副本

它不會更改數組中的值,因為在每次迭代中,數組中的值都分配給x,而您正在更改x而不是數組中的值。

基本上,基於范圍的循環類似於以下普通for循環:

for(int i = 0; i < numbers.length(); i++)
{
     int x = numbers[i];

     //your code
}

有關更多信息,請查看c ++文檔: http//en.cppreference.com/w/cpp/language/range-for 它指出:

計算range_expression以確定要迭代的序列或范圍。 反過來,序列的每個元素都被解除引用並分配給變量,其范圍和名稱在range_declaration中給出。

你也會在那里找到“Shmil The Cat”的例子和更多的例子,它們將幫助你理解范圍循環的工作原理。

它不起作用,你沒有通過foreach對數組中的元素進行任何引用。 想一想,你在檢索數組元素的numbers ,使副本的副本, x不具有參考。 所以x經歷的任何變化都不會反映在數字數組中。

那么工作@Shmil The Cat如何建議的。 或傳統方式也會像你說的那樣完成工作。

向量項未賦值(在本例中為零),因為基於范圍的循環將容器視為原始副本,直到顯式傳遞原始容器的引用。

好用

for (int& x : numbers) x = 0; 

正如@Shmil The Cat所建議的那樣

為了幫助您理解,以下是您可以閱讀以下內容的方法:

數字的每一個元素, 數據復制x和設置x到0 //現在此不接觸在向量中的值。

for (int x : numbers) 
    x = 0; 

閱讀以下循環:
對於數字中的每個元素,對其進行引用 ,並通過引用將值更改為0.另一方面,更改向量中的值。

for (int &x : numbers)
    x = 0;

如果您只想為所有元素設置特定值,最好使用std::fill

std::fill(numbers.begin(), numbers.end(), 0);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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