基於范圍的for循環


基於范圍的for循環是一種可以針對數組中每個元素迭代一次的循環每次進行該循環迭代時,就會將一個元素從數組復制帶變量。基於范圍的for循環是C++ 11中的新功能。

  C++ 11提供了一個特殊版本的for循環,在很多情況下,它都可以簡化數組的處理,這就是基於范圍的for循環(Rang-Based for Loop)。在使用基於范圍的for循環處理數組時,該循環可以自動為數組中的每個元素迭代一次。例如,如果對一個8元素的數組使用基於范圍的for循環,則該循環將迭代8次。因為基於范圍的for循環可以自動知道數組中的個數,所以不必使用計數器變量控制其迭代,也不必擔心數組下標越界的問題。

  基於范圍的for循環使用了一個稱為范圍變量(Range Variable)。每次基於范圍的for循環迭代時,它都會復制下一個數組元素到范圍變量。例如,第一次循環迭代,范圍變量將包含元素0的值;第二次循環迭代,范圍變量將包含元素1的值,以此類推。

  以下是基於范圍的for循環的一般格式:

  for(dataType rangeVariable : array)

    statement;

  現在來仔細看看該格式的各個部分。

  dataType范圍變量的數據類型。它必須與數組元素的數據類型一樣,或者是數組元素可以自動轉換過來的類型。

  rangeVariable范圍變量的名稱。該變量將在循環迭代期間接收不同數組元素的值。在第一次循環迭代期間,它接收的是第一個元素的值,在第二次循環迭代期間,它接收的是第二個元素的值;以此類推。

  array是要讓循環進行處理的數組的名稱。該循環將對數組中的每個元素迭代一次。

  statement是在每次循環迭代期間要執行的語句。要在循環中執行更多的語句,則可以使用一組大括號來包圍多個語句。

  例如,假設已經定義了以下數組:int numbers[] = {3, 6, 9};

  可以使用基於范圍的for循環來顯示numbers數組的內容。語句如下:

  for ( int val : numbers)

  {

    cout << "The next value is ";

    cout << val << endll;

  }

  因為numbers數組有3個元素,所以該循環將迭代3次。第一次它迭代時,val變量將接受numbers[0]中的值;在第二次循環迭代期間,它將接收numbers[1]的值;在第三次循環迭代期間,它將接收numbers[2]的值。所以,該代碼將產生以下輸出結果:

  The next value is 3

  The next value is 6

  The next value is 9

  如果需要的話,可以使用auto關鍵字指定范圍變量的數據類型,而不必手動指定,示例如下:

  for ( auto val : numbers)

  {

    cout << "The next value is ";

    cout << val << endll;

  }

使用基於范圍的for循環來顯示一個string變量的元素。

#include <iostream>
#include <string>

using namespace std;

int main()
{
  string planets[] = {"Mercury", "Venus", "Earth", "Mars",
          "Jupiter", "Saturn", "Uranus",
          "Neptune", "Pluto(a dwarf planet)"};

  cout<<"Here are the planets: \n";

  for(string val : planets)
    cout << val <<endl;

  return 0;
}

結果:

 

   使用基於范圍的dor循環來修改數組

  當基於范圍的for循環執行時,其范圍變量將僅包含一個數組元素的副本。因此,不能使用基於范圍的for循環來修改數組的內容,除非將范圍變量聲明為一個引用。

  要將范圍變量聲明為引用變量,可以在循環頭的范圍變量名稱添加一個&符號。以下代碼即顯示了這樣一個示例,它使用了基於for循環來將用戶輸入的數據存儲到一個數組中。

#include <iostream>
#include <string>

using namespace std;

int main()
{
  const int SIZE = 5;
  int numbers[SIZE];

  //Get values for the array
  for(auto &val : numbers)
  {
    cout << "Enter an integer value: ";
    cin >> val;
  }

  //Display the values in the array
  cout << "\nHere are the values you entered:\n";

  for(auto val :numbers)
    cout << val << " ";

  cout << endl;
  return 0;
}

結果:

 

基於范圍的for循環和常規for循環對比

基於范圍的for循環可用於需要遍歷數組所有元素的任何情形,並且不需要使用元素下標。但是,如果出於某些目的需要使用元素小標時,基於范圍的for循環就不能使用了。另外,如果循環控制變量被用於訪問兩個或兩個以上不同數組的元素,那么它也不適合使用。在這種情況下,可以使用常規for循環

注意:引用范圍變量也可以使用auto關鍵字。如上示例所示。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM