RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 974878
Accepted
Trulimon
Trulimon
Asked:2020-04-25 21:21:05 +0000 UTC2020-04-25 21:21:05 +0000 UTC 2020-04-25 21:21:05 +0000 UTC

使用算法比较和删除数组元素

  • 772

给定三个数组,您需要将第一个与其他两个进行比较,并显示其他两个中缺少的元素。

输入是数组大小和组成:

6

0 5 7 8 9 11

5

1 2 3 4 5

3

3 6 7

应该是答案

0 8 9 11

工作解决方案:

#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;

typedef vector<short> vSh;

short read_item(){
    short item;
    std::cin >> item;
    return item;
}

vSh read_vector(short n){
    cin >> n;
    vSh v(n);
    generate_n(v.begin(), n, read_item);
    return v;
}

int main(){
    short n, m, k;
    vSh v1, v2, v3, dif;

    // Заполняю контейнеры.
    v1 = read_vector(n);
    v2 = read_vector(m);
    v3 = read_vector(k);

    // Объединяю, добавлением во второй контейнер третий.
    copy(v3.begin(), v3.end(), back_inserter(v2));

    //Сортирую получившийся объединённый контейнер.
    sort(v2.begin(), v2.end());

    //Удаляю в нем повторяющиеся элементы.
    auto it = unique(v2.begin(), v2.end());
    v2.erase(it, v2.end());

    //Сортирую первый контейнер.
    sort(v1.begin(), v1.end());

    //Произвожу "вычитание" из первого контейнера элементы, которые есть в 
    //объединённом.
    set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(),
                   inserter(dif, dif.begin()));

    //Произвожу вывод элементов через пробел.
    copy(dif.begin(), dif.end(), ostream_iterator<short>(cout, " "));


    return 0;
}

非常感谢您帮助您提供示例和评论,以了解应用算法的过程!!!!

c++
  • 3 3 个回答
  • 10 Views

3 个回答

  • Voted
  1. Vlad from Moscow
    2020-04-25T21:42:17Z2020-04-25T21:42:17Z

    如果容器未排序,则必须在其他两个容器中按顺序搜索第一个容器的元素。

    下面是一个演示程序,展示了如何在这种情况下使用标准算法。

    #include <iostream>
    #include <vector>
    #include <iterator>
    #include <algorithm>
    
    int main() 
    {
        std::vector<int> v1 = { 0, 5, 7, 8, 9, 11 };
        std::vector<int> v2 = { 1, 2, 3, 4, 5 };
        std::vector<int> v3 = { 3, 6, 7 };
    
        std::cout << "v1: ";
        std::copy( std::begin( v1 ), std::end( v1 ), std::ostream_iterator<int>( std::cout, " " ) );
        std::cout << '\n';
    
        std::cout << "v2: ";
        std::copy( std::begin( v2 ), std::end( v2 ), std::ostream_iterator<int>( std::cout, " " ) );
        std::cout << '\n';
    
        std::cout << "v3: ";
        std::copy( std::begin( v3 ), std::end( v3 ), std::ostream_iterator<int>( std::cout, " " ) );
        std::cout << '\n';
    
        auto present = [&v2, &v3] ( const auto &x )
        {
            return std::find( std::begin( v2 ), std::end( v2 ), x ) != std::end( v2 ) ||
                   std::find( std::begin( v3 ), std::end( v3 ), x ) != std::end( v3 );
        };
    
        std::cout << "\ndifference: ";
        std::remove_copy_if( std::begin( v1 ), std::end( v1 ),
                             std::ostream_iterator<int>( std::cout, " " ),
                             present );
        std::cout << std::endl;                         
    
        return 0;
    }
    

    程序输出到控制台:

    v1: 0 5 7 8 9 11 
    v2: 1 2 3 4 5 
    v3: 3 6 7 
    
    difference: 0 8 9 11 
    
    • 2
  2. Yernar
    2020-04-25T21:56:21Z2020-04-25T21:56:21Z

    copy_if您也可以使用查找

    #include <iostream>
    #include <vector>
    #include <iterator>
    #include <algorithm>
    
    using namespace std;
    
    int main() 
    {
        vector<int> v1 = { 0, 5, 7, 8, 9, 11 };
        vector<int> v2 = { 1, 2, 3, 4, 5 };
        vector<int> v3 = { 3, 6, 7 };
        vector<int> ans;
    
        copy_if(v1.begin(), v1.end(), std::back_inserter(ans), [v2, v3](int i) { 
          return find(v2.begin(), v2.end(), i) == v2.end() && find(v3.begin(), v3.end(), i) == v3.end();
        });
    
        copy(ans.begin(), ans.end(), std::ostream_iterator<int>( std::cout, " " ) );
        return 0;
    }
    

    编码

    PS 答案存储在数组中ans

    • 2
  3. Best Answer
    isnullxbh
    2020-04-25T21:57:15Z2020-04-25T21:57:15Z

    缺点:不考虑重复,数组必须排序。

    #include <vector>
    #include <algorithm>
    #include <iostream>
    
    using vector_t = std::vector<int>;
    
    int main()
    {
        vector_t vec_f = { 0, 5, 7, 8, 9, 11 };
        vector_t vec_s = { 1, 2, 3, 4, 5 };
        vector_t vec_t = { 3, 6, 7 };
    
        std::move(vec_t.begin(), vec_t.end(), std::back_inserter(vec_s));
    
        vector_t diff;
        auto it = std::set_difference(vec_f.cbegin(), vec_f.cend(),
            vec_s.cbegin(), vec_s.cend(),
            std::inserter(diff, diff.begin()));
    
        for (const auto& val : diff)
            std::cout << val << ' ';
    
        return 0;
    }
    
    • 2

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    根据浏览器窗口的大小调整背景图案的大小

    • 2 个回答
  • Marko Smith

    理解for循环的执行逻辑

    • 1 个回答
  • Marko Smith

    复制动态数组时出错(C++)

    • 1 个回答
  • Marko Smith

    Or and If,elif,else 构造[重复]

    • 1 个回答
  • Marko Smith

    如何构建支持 x64 的 APK

    • 1 个回答
  • Marko Smith

    如何使按钮的输入宽度?

    • 2 个回答
  • Marko Smith

    如何显示对象变量的名称?

    • 3 个回答
  • Marko Smith

    如何循环一个函数?

    • 1 个回答
  • Marko Smith

    LOWORD 宏有什么作用?

    • 2 个回答
  • Marko Smith

    从字符串的开头删除直到并包括一个字符

    • 2 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5