2015-02-23 102 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 
    } 
}