如何在 C++ 中创建不同类型的多个向量的组合,而无需硬编码循环

问题描述 投票:0回答:1

以下问题询问如何查找相同类型的

n
向量的“所有组合”,例如
std::string
如何在 C++ 中创建多个向量的组合而无需硬编码循环?

(这意味着,将所有可能的组合连接到字符串并打印它们。)

所以,为了

std::vector<std::string> v1{ "T", "C", "A" };
std::vector<std::string> v1{ "C", "G", "A" };
std::vector<std::string> v1{ "C", "G", "T" };

我们会得到:

TCC
TCG
TCT
TGC
TGG
TGT
TAC
TAG
TAT
CCC
CCG
CCT
CGC
CGG
CGT
CAC
CAG
CAT
ACC
ACG
ACT
AGC
AGG
AGT
AAC
AAG
AAT

使用递归的一个答案是这样的:https://stackoverflow.com/a/1700227/7302562

通过使用可变参数模板,不同类型的向量是否可以实现相同的效果?

(如果是这样,我们可以传递

std::function
或类似的东西以及向量来指定要做什么,而不是进行硬编码连接吗?)

(我刚刚开始了解可变参数模板,所以我的第一次尝试并不是真正可以展示的......我希望这个问题本身并不愚蠢......)

c++ variadic-templates
1个回答
0
投票

您可以使用std::variant。它是一个允许您在变量中拥有两种或多种类型的模板。示例:

std::variant<std::string, int> myVariant = 3;

此实现的唯一问题是,如果您想获取变量的值,则需要知道变量的 type。示例:

if(holds_alternative<int>(myVariant){
   std::get<int> myVariant // 3
}

但是,如果您只想使用原始类型或字符串,会更容易:

std::vector<std::variant<std::string, int>> v1{ "T", 4, "A", 83 };
© www.soinside.com 2019 - 2024. All rights reserved.