以下问题询问如何查找相同类型的
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
或类似的东西以及向量来指定要做什么,而不是进行硬编码连接吗?)
(我刚刚开始了解可变参数模板,所以我的第一次尝试并不是真正可以展示的......我希望这个问题本身并不愚蠢......)
您可以使用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 };