文章目錄
- 使用范圍for語句處理多維數組
使用范圍for語句處理多維數組
舉個例子,使用范圍for語句輸出多維數組(ia)所有值:
for (const auto &row : ia)for (auto col : row)cout << col << endl;
本循環中并沒有任何寫操作,可仍將外層循環的控制變量聲明成了引用類型,這是為了避免數組被自動轉換成指針。如果不用引用類型,則循環如下述形式:
for (auto row : ia)for (auto col : row)
程序無法通過編譯。第一個循環想要遍歷ia的所有元素(實際上是大小為4的數組),但由于row不是引用類型,所以編譯器初始化row時會自動將這些數組形式的元素轉換成指向數組內首元素的指針。這樣得到的row類型就是int*,顯然內層循環“for (auto col : row)”就不合法了,其含義成了編譯器試圖在一個int*內遍歷,和程序的初衷相去甚遠。
因此,要使用范圍for語句處理多維數組,除了最內層的循環外,其他所有循環的控制變量都應該是引用類型。