-1

例如:

<1,2,3> 作为函数 comb 的输入以获得 2 个元素的组合将输出结果 <<1,2>,<1,3>,<2,3>>,作为同一函数的输入将得到 <<<1,2>,<1,3>>,<<1,3>,<2,3>>,<<1,2>,<2,3>>,它们作为输入相同函数将得到....

逻辑是一样的,只是类型改变了,所以可以通用。我试着写这样的东西:

template<typename V>
vector<vector<vector<V>::const_iterator>> comb(const vector<V>){
   ....

   while(next_combination(...))
   vector<vector<vector<V>::const_iterator>> results;
   return results;
}

vector<string> input
comb(comb(comb(input)));

但是编译器一直抱怨无法推断出返回值的类型。

谢谢。

4

1 回答 1

1

也许以下内容会有所帮助:

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

注意变化:

  • 的返回值comb是向量的向量
  • 的参数comb不是const因为next_combination改变它
  • 里面有很多向量的复制comb;所有的复制似乎都是必要的
于 2012-08-20T19:37:24.597 回答