0

これは宿題ですが、どうすればいいのかよくわかりません。通常、v3 = v1を作成し、次にiを介してv2をインクリメントし、v2の要素がv3にあるかどうかを確認します。そうでない場合は、v3に追加します。しかし、メソッドの外部でv3を作成することはできません。メソッドの内部で作成しようとすると、それ自体がリセットされます。誰か助けてくれませんか?

これが私が彼らのために持っているコードとこれまでの彼らのラッパー関数です(それは単なるスケルトンです):

// returns a new vector; every element in v1 and every element in v2 are also in this new vector
// if an element appears in both v1 and v2, it is only added once to the new vector
template <typename T> vector<T> vec_union(vector<T> &v1, vector<T> &v2)
{
    return v1;
}

template <typename T> vector<T> vec_union(vector<T> &v1, vector<T> &v2, unsigned i)
{
    return v1;
}

// returns a new vector; every element that is in both v1 and v2 are also in this new vector
// there are no duplicates in v1 and v2
template <typename T> vector<T> intersection(vector<T> v1, vector<T> v2)
{
    return v1;
}

template <typename T> vector<T> intersection(vector<T> v1, vector<T> v2, unsigned i)
{
    return v1;
}

// returns a new vector; every element that is in v1 but not v2 are also in this new vector
// there are no duplicates in v1 and v2
template <typename T> vector<T> difference(vector<T> v1, vector<T> v2)
{
    return v1;
}


template <typename T> vector<T> difference(vector<T> v1, vector<T> v2, unsigned i)
{
    return v1;
}
4

1 に答える 1

1

テンプレート パラメーターをv3転送して作成し、以下で行ったように渡します。Tvector

vector<T> v3;

私はあなたvec_unionのためにあなたの機能を実装しました。次の点に注意してくださいv3。関数内に作成しました。を返しました。これにより、呼び出し元が を呼び出したときに、外部コードが取得v3するコピーが作成されます。v3vec_union

template <typename T> vector<T> 
vec_union(vector<T> &v1, vector<T> &v2)
{
  if ( v2.empty() )
    return v1;

  vector<T>::iterator found = std::find(v1.begin(), v1.end(), v2.back());
  if ( found == v1.end() )
  {
    // all good, element not already in v1, so insert it.
    T value = v2.back();
    v1.push_back(value);
    v2.pop_back(); // remove back element
    return vec_union(v1, v2);
  }
  else
  {
    // element was already in v1, skip it and call vec_union again
    v2.pop_back(); // remove back element
    return vec_union(v1, v2);
  }
}

私の答えはv1とv2を変更することに注意してください。これは、v1 と v2 を繰り返しコピーすることによって途方もなく非効率的ではない再帰的な実装を実現するために、先生が期待していたことだと思いました。

次のように vec_union を呼び出します。

vector<int> firstVector;
vector<int> secondVector;
vector<int> unionVector = vec_union(firstVector, secondVector);
于 2013-03-18T06:17:57.347 に答える