首页 > 解决方案 > 为什么即使输入相等 v3 也不返回任何内容

问题描述

我需要将相同的元素从 v1 和 v2 推送到 v3 为什么当输入类似时 v3 向量仍然为空

逻辑有缺陷还是有帮助?

依此类推_ _ _

vector<int> commonElements(vector<int>v1, vector<int>v2)
{
    vector<int>v3;

   // set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),v3.begin());
   for(int i=0;i<v1.size();i++)
    for(int j=i+1;j<v2.size();j++)
    {
        if(v1[i]==v2[j])
            v3.push_back(v1[i]);
    }

    return v3;
}

标签: c++vectoroutputlogic

解决方案


没有必要放弃std::set_intersection。问题是接收结果的容器需要适当调整大小以保存结果。

std::back_inserter()如果您使用迭代器,则可以使用空向量:

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

std::vector<int> commonElements(const std::vector<int>& v1, const std::vector<int>& v2)
{
    std::vector<int> v3;
    set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(), std::back_inserter(v3));
    return v3;
}

int main()
{
   auto test = commonElements({1,2,3,4,5}, {4,5,6,7,8});
   for (auto &v : test )
     std::cout << v << " ";
}

输出:

4 5

推荐阅读