c++ - 从列表/vector 创建嵌套 for 循环的最佳方法是什么?

标签 c++ for-loop vector

<分区>

我有一个任意大小的 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 在我介绍的情况下,但可以有一个任意的维数。

感谢任何输入。

最佳答案

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

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

关于c++ - 从列表/vector 创建嵌套 for 循环的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59429600/

相关文章:

c++ - 使用 Qt 程序构建 crypto++ 时出现链接器错误

c++ - Unresolved external symbol 错误 (LNK2019),包含 header 后

c++ - 接受可变数量的相同类型的参数

c++ - 删除 TXMLDocument 对象 Embarcadero

zip 数组的 mySQL 查询优化

javascript - 找出一个数的最大因数(除了它本身)

c++ - 如何为 vector 重载 ostream (<<)(打印 vector 中的所有集合)

带 vector 的 C++ 2d unordered_map

Java重复捕手for循环仍然返回欺骗

vector - OpenLayers:解析的 GeoJSON 点始终显示在 coords(0 , 0)