zoukankan      html  css  js  c++  java
  • 泛型算法(十三)之单值过滤

    1、unique(ForwardIterator first, ForwardIterator last):对序列中一群连续相等的元素,仅保留第一个元素,该群其他元素被这群元素之后的其他值的元素替换。该函数不改变这些值的相互顺序,不改变容器的size。函数返回值为最后一个保留元素的下一个位置(past-the-end element)。建议函数返回后resize容器对象。

        std::vector<int> c = {1, 1, 1, 2, 3, 3, 4, 5};
    
        std::unique(c.begin(), c.end());
        for (auto var : c)
        {
            std::cout << var << ",";
        }
        //打印结果:1,2,3,4,5,3,4,5,

    想要真正删除重复的元素可以这样:

        c.resize(std::unique(c.begin(), c.end()) - c.begin());

    或者这样:

        c.erase(std::unique(c.begin(), c.end()), c.end());

    2、unique(ForwardIterator first, ForwardIterator last, BinaryPredicate pred):重载版本,用二元谓词pred替换operator==算符。

    自己实现pred,向算法定制操作。

    3、unique_copy(InputIterator first, InputIterator last, OutputIterator result):把一个序列中元素拷贝到另一个序列;对于一群连续的相等的元素,仅拷贝第一个元素。

        std::vector<int> c = {1, 1, 1, 2, 3, 3, 4, 5};
        std::vector<int> result;
        result.resize(5);
    
        //将c中不重复的元素逐个拷贝到result中
        std::unique_copy(c.begin(), c.end(), result.begin());
        //输出result
        for (auto var : result)
        {
            std::cout << var << ",";
        }
        //打印结果:1,2,3,4,5,

    4、unique_copy(InputIterator first, InputIterator last, OutputIterator result, BinaryPredicate pred):重载版本,用二元谓词pred替换operator==算符

    自己实现pred,向算法定制操作。

  • 相关阅读:
    笔记:一篇关于容器和虚拟机的对比
    语义化版本说明脑图
    KiCad EDA 5.1.4 发布了
    KiCad 5.1.4 无法覆铜?
    mac 常用的终端命令
    PC 商城扫描二维码登录
    Git的撤销与回滚
    springboot 集成elasticsearch5.4.3
    redis 缓存类型为map
    基于Elasticsearch 5.4.3的商品搜索系统
  • 原文地址:https://www.cnblogs.com/dongerlei/p/5142807.html
Copyright © 2011-2022 走看看