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

How to compare 2 vectors and create a separate vector based on the comparison

本文关键字:比较 向量 创建 单独 何比较      更新时间:2023-10-16

我正在考虑创建一个算法来比较 2 个向量(v1v2 (,并创建一个新的向量v3,该向量将保存v1v2之间不共享的值。

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

向量将始终被排序。

如果像您的示例中一样对范围进行排序,则可以使用 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

现场示例

抱歉给您带来麻烦,并在此处添加新答案。内森·奥利弗给出了准确的答案。 但是为了好玩,如果我必须编写自己的函数来实现这一点,我在数组而不是 vector 上尝试了它(因为更改 vector 的代码将是微不足道的任务(。

在此处添加我的代码片段。

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

注意:这里的结果存储在全局数组中,并且具有固定的大小。 这可以直接在向量中解决。