zoukankan      html  css  js  c++  java
  • cb45a_c++_STL_算法_删除_(3)_unique(唯一的意思)删除连续性的重复的数据

    cb45a_c++_STL_算法_删除_(3)_unique(唯一的意思)删除连续性的重复的数据
    unique(b,e),删除连续性的,删除重复的数据,比如如果有两个连续的5,5,则留下一个。
    unique(b,e,p)
    unique_copy(b1,e1,b2)
    unique_copy(b1,e1,b2,p)
    copy(source, source + sourceNum,back_inserter(ilist));//ilist是空的,无数据,所以需要,back_inserter

    删除性算法

    注意:
    1.应该有一个unique_if(),但是没有
    2.应该有一个unique_copy_if(),但是没有

    STL算法都是针对容器使用的。
    error C2760: 语法错误: 意外的令牌“标识符”,预期的令牌为“;”
    vs2017打开项目工程----> 属性 ---> c/c++ --> 语言 --> 符合模式 修改成否即可

     1 /*cb45a_c++_STL_算法_删除_(3)_unique(唯一的意思)删除连续性的重复的数据
     2 unique(b,e),删除连续性的,删除重复的数据,比如如果有两个连续的5,5,则留下一个。
     3 unique(b,e,p)
     4 unique_copy(b1,e1,b2)
     5 unique_copy(b1,e1,b2,p)
     6     copy(source, source + sourceNum,back_inserter(ilist));//ilist是空的,无数据,所以需要,back_inserter
     7 
     8 删除性算法
     9 
    10 注意:
    11   1.应该有一个unique_if(),但是没有
    12   2.应该有一个unique_copy_if(),但是没有
    13 
    14   STL算法都是针对容器使用的。
    15    error C2760: 语法错误: 意外的令牌“标识符”,预期的令牌为“;”
    16    vs2017打开项目工程----> 属性 ---> c/c++ --> 语言 --> 符合模式 修改成否即可
    17 */
    18 
    19 #include <iostream>
    20 #include <algorithm>
    21 #include <functional>
    22 #include <iterator>
    23 #include <list>
    24 
    25 using namespace std;
    26 
    27 template <typename TT2>
    28 void print(TT2 &ilist)
    29 {
    30     for (TT2::iterator iter = ilist.begin(); iter != ilist.end(); ++iter)
    31         cout << *iter << ' ';
    32     cout << endl;
    33 }
    34 bool differenceOne(int elem1, int elem2)//前一个比后一个大1或者小于1
    35 {
    36     return elem1 + 1 == elem2 || elem1 - 1 == elem2;
    37 }
    38 
    39 int main()
    40 {
    41     int source[] = {1,4,4,6,1,2,2,3,1,6,6,6,5,7,5,4,4};
    42     int sourceNum = sizeof(source) / sizeof(source[0]);
    43     list<int> ilist;
    44     copy(source, source + sourceNum,back_inserter(ilist));//ilist是空的,无数据,所以需要,back_inserter
    45     print(ilist);
    46 
    47     cout << "删除连续重复的数据,只留下一个" << endl;
    48     list<int>::iterator pos;
    49     pos=unique(ilist.begin(), ilist.end());//返回的是迭代器的位置,定位在删除后的位置的下一个位置。
    50     for (list<int>::iterator iter = ilist.begin(); iter != pos; ++iter)
    51         cout << *iter << ' ';
    52     cout << endl;
    53     cout << "删除前:" << endl;
    54 
    55     copy(source, source + sourceNum, ilist.begin());
    56     print(ilist);
    57 
    58     // 3,2,5,7,6,
    59     //3比2大,把2删除,剩余:3,5,7,6
    60     //3,5,比较,5大不作处理。
    61     //5,7,不作处理
    62     //7,6,把6删除。
    63     //剩余3,5,7
    64 
    65 //cout << "这里的greater<>(),作用是如果前面的数比后面的数大,则删除后面的数" << endl;
    66     pos = unique(ilist.begin(), ilist.end(), greater<int>());
    67 
    68     cout << "删除后:" << endl;
    69     for (list<int>::iterator iter = ilist.begin(); iter != pos; ++iter)
    70         cout << *iter << ' ';
    71     cout << endl;
    72 
    73     copy(source, source + sourceNum, ilist.begin());
    74     print(ilist);
    75     cout << "使用unique_copy:" << endl;
    76     unique_copy(ilist.begin(), ilist.end(), ostream_iterator<int>(cout, " "));
    77     cout << endl;
    78 
    79     cout << "前一个比后一个大1或者小于1,就删除后面的一个数" << endl;
    80     unique_copy(ilist.begin(), ilist.end(), ostream_iterator<int>(cout, " "), differenceOne);
    81 
    82 
    83     return 0;
    84 }
    欢迎讨论,相互学习。 txwtech@163.com
  • 相关阅读:
    如何解决Ubuntu下的的“system program problem detected”
    GDM, KDM, LightDM, SDDM显示管理器的区别和安装配置
    在Linux下安装使用vokoscreen录制网站上的视频与声音-Ubuntu-mate-20.04桌面环境测试录屏推荐
    Ubuntu-mate-20.04-desktop安装总结
    云上渗透-基于阿里云环境渗透
    fastadmin前台getshell漏洞
    gitlab CI/CD Custom SAST
    前端神器RRWEB
    【转】六种减小Docker镜像大小的方法
    splunk 多个数据关联查询
  • 原文地址:https://www.cnblogs.com/txwtech/p/12362075.html
Copyright © 2011-2022 走看看