0
点赞
收藏
分享

微信扫一扫

一些简易函数

hwwjian 2022-02-27 阅读 136

这里写目录标题

unique

iterator unique(iterator it_1,iterator it_2);

unique函数属于STL中比较常用函数,它的功能是元素去重。
STL中unique的函数 unique的功能是去除相邻的重复元素(只保留一个),因为unique去除的是相邻的重复元素,所以一般用之前都会要排一下序。

还有一个容易忽视的特性是它并不真正把重复的元素删除,而是指重复元素的位置被不重复的元素给占领了,
有很多文章说的是,unique去重的过程是将重复的元素移到容器的后面去,实际上这种说法并不正确,应该是把不重复的元素移到前面来。也就是,部分重复的元素被不重复的元素覆盖掉了,但是后面的元素保持不变

返回值是去重后序列(这个序列不含有重复数值)的末尾的下一个元素
返回值是一个迭代器,它指向的是去重后容器中不重复序列的最后一个元素的下一个元素

#include<iostream>
#include<algorithm>
#include<cassert>
using namespace std;
 
int main()
{
 
    vector<int> a ={1,3,3,4,5,6,6,7};
    vector<int>::iterator it_1 = a.begin();
    vector<int>::iterator it_2 = a.end();
    vector<int>::iterator new_end;
 
    new_end = unique(it_1,it_2); //注意unique的返回值
    a.erase(new_end,it_2);
    cout<<"删除重复元素后的 a : ";
    for(int i = 0 ; i < a.size(); i++)
        cout<<a[i];
    cout<<endl;
 
}

用erase实现彻底去重,反正输入时可以记录重复元素出现的次数
unique用法详解
STL中erase()的用法

lowbit

lowbit()函数用来取一个二进制最低位的一与后边的0组成的数
例:
5(101),lowbit(5)=1(1)

12(1100),lowbit(12)=4(100)

int lowbit(int t)
{undefined
    return t&(-t);
}

在这里插入图片描述
lowbit用法

upper_bound 、lower_bound

algoritm中的标准算法,原理是二分法,所以使用前要先升序排列
在map、set中当然也可以用,元素自动进行升序排列,更适用了
参数分别是:查找的数组段的首地址、尾地址、查找的值k
返回值:第一次出现大于等于那个要查找的数的地址
要得到下标需要减去数组的首地址

   	set<int> s;
 	s.insert(1);  
    s.insert(3);  
    s.insert(4);  
    s.insert(5); 
    s.insert(6);
    cout<<*s.lower_bound(1)<<endl;  //3
    cout<<*s.lower_bound(3)<<endl;  //3
    cout<<*s.upper_bound(4)<<endl;  //5 而不是6 

lower_bound(a,a+n,k))-a) 得到的是下标噢(数组下标从0开始),要得到排位需要加1

while(scanf("%d",&k))
   {
       cout<<k<<"的第一个大于等于它的位置在"<<((lower_bound(a,a+n,k))-a)+1<<endl;
   }

上链接
多看看
再看

举报

相关推荐

0 条评论