【问题标题】:C++11 Multidimensional Array IterationC++11 多维数组迭代
【发布时间】:2015-04-24 18:41:40
【问题描述】:

要遍历 C 风格的多维数组,我们有

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;

【问题讨论】:

    标签: arrays class c++11 iteration


    【解决方案1】:

    如果您需要使用迭代器,请照常使用:

    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
      }
    }
    

    【讨论】:

      【解决方案2】:

      像往常一样:

      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++11 基于范围的 for 循环会更容易

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

      【讨论】:

      • 你能解释一下(*it2) = 0;周围的括号吗
      • @peedurrr 它们不是必需的,但我通常将“指针解引用”(运算符 *(this))括在括号中以避免混淆和/或歧义。
      猜你喜欢
      • 2013-01-23
      • 2023-03-08
      • 2014-05-17
      • 1970-01-01
      • 2014-04-20
      • 2021-11-02
      • 2011-11-20
      相关资源
      最近更新 更多