如何比较2个向量并根据比较创建单独的向量

时间:2017-03-29 16:57:30

标签: c++ algorithm vector

我正在考虑创建一个比较2个向量(v1v2)的算法,并创建一个新的向量v3,它将保存v1之间未共享的值1}}和v2

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main(int args[])
{
vector<int> v1 = { 1,2,3,4,5,6,7,8,9 };
vector<int> v2 = { 1,2,6 };
vector<int> v3; //V3 should equal = {3,4,5,7,8,9}.

return 0;
}

矢量将始终排序。

2 个答案:

答案 0 :(得分:6)

如果在示例中,范围已排序,则可以使用std::set_symmetric_difference。它将返回两个范围之间不共享的所有元素。使用您的示例,您将使用

std::set_symmetric_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), std::back_inserter(v3));

所以把它们放在一起我们有

int main()
{
    std::vector<int> v1 = { 1,2,3,4,5,6,7,8,9 };
    std::vector<int> v2 = { 1,2,6 };
    std::vector<int> v3; //V3 should equal = {3,4,5,7,8,9}.

    std::set_symmetric_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), std::back_inserter(v3));

    for (auto e : v3)
        std::cout << e << " ";

    return 0;
}

输出:

3 4 5 7 8 9

Live example

答案 1 :(得分:0)

很抱歉在这里遇到麻烦并添加新答案。 NathanOliver给出了精确的答案。  但是为了好玩,如果我必须编写自己的函数来实现它,我在数组而不是向量上尝试它(用于更改向量的代码将是一项微不足道的任务)。

在此处添加我的代码段。

#include<iostream>

using namespace std;

int arr1[]={2,3,6,10};
int arr2[]={3,5,7,9,10};

int result[10];
int result_size=0;

void getUncommonValues(int *arr1, int size1, int *arr2, int size2){
    if ( (size1 == 0) && (size2 == 0) )
        return;

    if( size1 == 0){
        result_size=size2;
        for (int i=0; i < size2; i++)
            result[i] = arr2[i];
    }

    if (size2 == 0){
        result_size=size1;
        for (int i=0; i < size1; i++)
            result[i] = arr1[i];
    }

    int i1=0, i2=0;
    while (size1 > i1){
        if ( arr1[i1] < arr2[i2]){
            result[result_size++] = arr1[i1++];
        } else{
            if ( arr2[i2] < arr1[i1] )
                result[result_size++] = arr2[i2++];
            else{
                i1++; i2++;
            }
        }
        if ( i2 == size2 ){
            for ( ; i1 < size1; i1++)
                result[result_size++] = arr1[i1];
        }
    }

    for ( ; i2 < size2 ; i2++){
        result[result_size++] = arr2[i2];
    }
}

int main(){
    getUncommonValues(arr1,sizeof(arr1)/sizeof(int), arr2,sizeof(arr2)/sizeof(int));
    for (int i =0; i<result_size; i++)
        cout << result[i] <<" ,";

    cout << endl;
    return 0;
}

注意:此处结果存储在全局数组中并具有固定大小。    这可以直接在矢量中解决。