gpt4 book ai didi

c++ - 在运行时定义循环

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:44:48 27 4
gpt4 key购买 nike

考虑这个数组,例如

#include <iostream>
#include <vector>

int main(int argc, char* argv[])
{
std::vector<char> ls(3); ls[0] = 'a'; ls[1] = 'b'; ls[2] = 'c';
std::vector<char> us(3); us[0] = 'A'; us[1] = 'B'; us[2] = 'C';
std::vector<int> ns(3); ns[0] = 1; ns[1] = 2; ns[2] = 3;

std::vector<char>::const_iterator lIt;
std::vector<char>::const_iterator uIt;
std::vector<int>::const_iterator nIt ;

for(lIt = ls.begin(); lIt != ls.end();++lIt)
for(uIt = us.begin();uIt != us.end();++uIt)
for (nIt = ns.begin();nIt != ns.end();++nIt)
std::cout << *lIt << *uIt << *nIt << "\n";

}

它生成三个 vector “aA1,...,cC3”的所有可能组合。现在,我想改变它的方式是在运行期间,程序决定要经过的 vector 数量(一个、两个或三个)并生成所选 vector 的组合。或者简单地说,有没有办法在运行时生成一个嵌套循环 block ?

最佳答案

您可以按照以下行定义递归函数:

template<class Container>
Container combinations(Container last) {
return last;
}

template<class Container, class... Containers>
Container combinations(Container curr, Containers... rest) {
auto ret = Container();
for (auto i : curr)
for (auto j : combinations(rest...))
ret.push_back(i + j);
return ret;
}

然后只需:

int n = /* number of vectors */;
switch (n) {
case 1: print_vec(combinations(ls)); break;
case 2: print_vec(combinations(ls, us)); break;
case 3: print_vec(combinations(ls, us, ns)); break;
}

Live demo

当然假设有一个简单的 print_vec 函数。

您甚至可以通过传递应用于组合两个元素的仿函数而不是 operator+ 来进一步自定义组合,但这取决于您的需要。

关于c++ - 在运行时定义循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28156384/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com