C++ 如何编写泛型函数来计算递归组合
例如: 作为对函数的输入,梳取2个元素的组合将输出结果,这作为对同一函数的输入将得到C++ 如何编写泛型函数来计算递归组合,c++,generics,recursion,combinations,C++,Generics,Recursion,Combinations,例如: 作为对函数的输入,梳取2个元素的组合将输出结果,这作为对同一函数的输入将得到 或许以下几点会有所帮助: template <typename T> vector<vector<T> > comb(vector<T> v) { vector<vector<T> > result; // may want to sort the input vector before iterating over the
或许以下几点会有所帮助:
template <typename T>
vector<vector<T> > comb(vector<T> v)
{
vector<vector<T> > result;
// may want to sort the input vector before iterating over the combinations
do {
result.push_back(v);
} while (next_combination(...));
return result;
}
模板
向量梳(向量v)
{
矢量结果;
//可能需要在迭代组合之前对输入向量进行排序
做{
结果:推回(v);
}while(next_组合(…);
返回结果;
}
注意这些变化:
的返回值是向量的向量comb
的参数不是comb
,因为const
改变了它next\u组合
- 在
中有很多向量的复制;所有这些复制似乎都是必要的comb
之间应该需要一个空格。>
和>
之间有区别。我想知道为什么你的编译器没有抱怨。投票关闭,没有真正的代码和编译器错误是不可能回答的,而且你似乎不再需要(你可能想自己关闭这个问题)@Papergay:如果使用C++11编译器,它将被正确处理。上面的代码工作正常,谢谢。我使用const_迭代器的原因是为了避免一次又一次地复制内容进行排列或组合,part vector::const_迭代器似乎依赖于返回类型推断,这就是我的代码不起作用的原因。
template <typename T>
vector<vector<T> > comb(vector<T> v)
{
vector<vector<T> > result;
// may want to sort the input vector before iterating over the combinations
do {
result.push_back(v);
} while (next_combination(...));
return result;
}