std::unique,std::sort,std::erase

中文标准库:std::unique

中文标准库:std::sort

中文标准库:std::erase

一、unique

注意:

unique是移除连续的重复元素,不连续的不会移除,因此如果要移除所有重复元素需要先进行排序

对容器使用unique并不会使容器的元素个数减少,实际上容器的容量并没有改变,因此如果要移除容器中的连续重复元素需要配合std::erase

返回值是:指向容器新结尾的前向迭代器。

set只能插入不同的元素,因此set在某些时候可以替代unique

函数原型:

template <class ForwardIterator>
ForwardIterator unique(ForwardIterator first, ForwardIterator last);

template <class ForwardIterator, class BinaryPredicate>
ForwardIterator unique(ForwardIterator first, ForwardIterator last,BinaryPredicate pred);

实现:

template<class ForwardIt>
ForwardIt myunique(ForwardIt first, ForwardIt last)
{//思想:从旧的容器中拿元素放到新的容器,如果遇到相同的则跳过,继续去拿下一个,直到拿完旧容器。
    if (first == last)
        return last;
    auto r = first;
    while (++first != last)  //first在这儿一定要先自增,因为last是容器的最后一个元素的迭代器加一
    {
        if (*first != *r)    //不相同就把旧的赋值给新的
        {
            *(++r) = *first;
        }
    }
    return ++r;  //r如果不自增则指向的是去重后的最后一个元素(使用erase就需要先++)
}

使用示例

    vector<int> vec1{ 2,3,3,3,4,2,3 };
    vector<int> vec2{ 1,4,4,5,5,6,4,1,7 };

    auto it1 = unique(vec1.begin(), vec1.end());//vec1:2,3,4,2,3,2,3 it1指向2
    //移除两个连续元素和为10的第二个元素,例如6,4移除4,vec2:1,4,4,5,6,1,7,1,7 it2指向1
    auto it2 = unique(vec2.begin(), vec2.end(), [=](int a, int b) {return a + b == 10; });

std::unique_copy

移除相邻重复元素,拷贝到新的容器

二、sort

注意:

默认使用升序

几个可能会用到的比较函数对象:

函数对象 描述
equal_to x == y
not_equal_to x != y
greater x > y
less x < y
greater_equal x >= y
less_equal x <= y

示例:

    vector<int> vec2{ 1,4,4,5,5,6,4,1,7 };
    sort(vec2.begin(), end(vec2));  //默认升序 114445567
    sort(vec2.begin(), vec2.end(), greater<int>());  //降序 765544411
    sort(vec2.begin(), vec2.end(), less<int>());     //升序
    sort(vec2.begin(), vec2.end(), [=](int a, int b) {return a > b; });  //降序

三、erase

注意:

<algorithm>没有erase函数,vector | map | list 各自erase的使用方法

删除去重后容器的末尾多余元素需要使用erase(first,last)

vector容器中的erase函数:

    iterator erase (const_iterator position);  //删除指定的一个元素
    iterator erase (const_iterator first, const_iterator last);  //删除区间所有元素

原文链接: https://www.cnblogs.com/mmmmmmmmm/p/14927617.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    std::unique,std::sort,std::erase

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/404121

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年4月24日 下午6:42
下一篇 2023年4月24日 下午6:42

相关推荐