-1

例えば:

<1,2,3> を関数 comb への入力として 2 つの要素の組み合わせを取得すると、結果 <<1,2>,<1,3>,<2,3>> が出力され、同じ関数への入力としてget <<<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はありませんconstnext_combination
  • 内部にはベクトルのコピーがたくさんありcombます。そのすべてのコピーが必要と思われる
于 2012-08-20T19:37:24.597 に答える