0

这是一个家庭作业,我真的不知道该怎么做。我通常会创建 v3 = v1,然后通过 v2、通过 i 递增,并检查 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通过转发T模板参数并将其传递给vector我在下面所做的那样创建:

vector<T> v3;

我已经vec_union为你实现了你的功能。请注意以下几点:我v3在函数内部创建了。我已返回v3,这v3会在调用者调用vec_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 回答