2015-02-23 98 views
0

要通過C風格的多維數組迭代,我們有C++ 11多維數組迭代

int arr[3][4]; 

for (int row = 0; row < 3; row++){ 
    for (int col = 0; col < 4; col++){ 
     ... 
    } 
} 

但是,如何可以一個使用迭代器遍歷如下:

array<array<int, 4>, 3> arr; 

使用下面的迭代器?

array<array<int, 4>, 3>::iterator it1; 

array<int, 4>::iterator it2; 

回答

1

照例:

array<array<int, 4>, 3> arr; 
for(array<array<int, 4>, 3>::iterator it1 = arr.begin(); it1 != arr.end(); ++it1) 
    for(array<int, 4>::iterator it2 = it1->begin(); it2 != it1->end(); ++it2) 
     (*it2) = 0; 

但它會更容易,你能解釋一下週圍的括號使用短C++爲基礎的範圍內循環

array<array<int, 4>, 3> arr; 
for(auto &it1 : arr) 
    for(auto &it2 : it1) 
     it2 = 0; 
+0

11'(* IT2)= 0;'請 – peedurrr 2015-02-23 12:51:47

+0

@peedurrr他們是沒有必要的,但我通常在括號中加上「指針解除引用」(運算符*(this)),以避免混淆和/或含糊不清。 – Marandil 2015-02-23 12:55:26

2

如果需要使用迭代器,使用起來像往常一樣:

for (auto itOuter = arr.begin(); itOuter != arr.end(); ++itOuter) { 
    for (auto itInner = itOuter->begin(); itInner != itOuter->end(); ++itInner) { 
    // use *itInner as appropriate 
    } 
} 

可以一樣好使用範圍爲基礎for循環,只要他們願意爲你工作:

for (auto &inner : arr) { 
    for (int &elem : inner) { 
    // use elem as appropriate 
    } 
}