从列表/向量创建嵌套循环的最佳方法是什么?

时间:2019-12-20 18:02:35

标签: c++ for-loop vector

我有一个任意大小的向量,并且需要创建一个for循环,从零到该数字的每个条目。

例如,如果我的列表是{2,3,4},则需要在程序中运行以下内容。

for (unsigned int i = 0; i < 2; ++i}
  for (unsigned int j = 0; j < 3; ++j}
    for (unsigned int k = 0; k < 4; ++k}
      { do stuff }

我的问题是我不知道有多少个元素,因此我无法明确说明所需的for循环的数量。我曾考虑过制作一个包含列表的类,并重载+运算符,迭代直到列表相等为止,但是我希望有些事情不会那么混乱。如果没有的话,我想我必须接受。有比我想的更干净的方法吗?

我需要这样做的原因是要遍历n维矩阵的所有元素,因此在我介绍的情况下,我的矩阵可以是2 x 3 x 4,但是可以具有任意数量的维。

感谢您的任何输入。

1 个答案:

答案 0 :(得分:1)

您可以使用递归循环函数,如下所示:

#include <vector>

void looper(std::vector<int> vec, size_t index) {
    if (index >= vec.size()) return;
    for (int i = 0; i < vec[index]; ++i) {
        looper(vec, index + 1);
        if (index == vec.size() - 1) { // Innermost loop!
            // do something...
        }
    }
}

int main()
{
    std::vector<int> test{ 2, 3, 4 };
    looper(test, 0);
    return 0;
}
相关问题