前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++STL常用算法

C++STL常用算法

作者头像
羊羽shine
发布2019-05-28 13:24:29
4680
发布2019-05-28 13:24:29
举报
文章被收录于专栏:Golang开发

查找算法

adjacent_find()

在iterator对标识元素范围内,查找一对相邻重复元素,找到则返回指向这对元素的第一个元素的迭代器。否则返回past-the-end。

代码语言:javascript
复制
    vector<int> vecInt;
    vecInt.push_back(1);
    vecInt.push_back(2);
    vecInt.push_back(3);
    vecInt.push_back(4);
    vecInt.push_back(5);
    vecInt.push_back(5);
    vector<int>::iterator it = adjacent_find(vecInt.begin(), vecInt.end());
binary_search

在有序序列中查找value,找到则返回true。注意:在无序序列中,不可使用。

代码语言:javascript
复制
    set<int> setInt;
    setInt.insert(2);
    setInt.insert(1);
    setInt.insert(8);
    setInt.insert(5);
    setInt.insert(9);
    bool bFind = binary_search(setInt.begin(),setInt.end(),8);
count()

利用等于操作符,把标志范围内的元素与输入值比较,返回相等的个数。

代码语言:javascript
复制
   vector<int> vecInt;
    vecInt.push_back(8);
    vecInt.push_back(2);
    vecInt.push_back(1);
    vecInt.push_back(4);
    vecInt.push_back(8);
    vecInt.push_back(6);
    int iCount = count(vecInt.begin(),vecInt.end(),8);  //iCount==2
count_if()

count_if 算法计算中的元素范围 [first, last),返回满足条件的元素的数量。

代码语言:javascript
复制
   vector<int> vecInt;
    vecInt.push_back(3);
    vecInt.push_back(3);
    vecInt.push_back(1);
    vecInt.push_back(4);
    vecInt.push_back(8);
    vecInt.push_back(9);
    int count = count_if(vecInt.begin(), vecInt.end(), evenNumber);// 偶数个数是 2;
find

利用底层元素的等于操作符,对指定范围内的元素与输入值进行比较。当匹配时,结束搜索,返回该元素的迭代器。

代码语言:javascript
复制
    vector<int> vecInt;
    vecInt.push_back(3);
    vecInt.push_back(3);
    vecInt.push_back(2);
    vecInt.push_back(4);
    vecInt.push_back(8);
    vecInt.push_back(9);
    vector<int>::iterator it = find(vecInt.begin(), vecInt.end(), 2);
equal_range:

返回一对iterator,第一个表示lower_bound,第二个表示upper_bound。

代码语言:javascript
复制
    set<int> setInt;
    for (int i=0; i<10; i++)
    {
        setInt.insert(i+1);
    }
    pair<set<int>::iterator, set<int>::iterator>  mypair = setInt.equal_range(3);
    set<int>::iterator it1 = mypair.first;
    cout << "it1:" << *it1 << endl;  //3  //4
    set<int>::iterator it2 =  mypair.second;
    cout << "it2:" << *it2 << endl;  //4  //4

查找算法

merge() 以下是排序和通用算法:提供元素排序策略 merge: 合并两个有序序列,存放到另一个序列。 例如:vecIntA,vecIntB,vecIntC是用vector<int>声明的容器,vecIntA已包含1,3,5,7,9元素,vecIntB已包含2,4,6,8元素 vecIntC.resize(9); //扩大容量 merge(vecIntA.begin(),vecIntA.end(),vecIntB.begin(),vecIntB.end(),vecIntC.begin()); 此时vecIntC就存放了按顺序的1,2,3,4,5,6,7,8,9九个元素

sort()

sort: 以默认升序的方式重新排列指定范围内的元素。若要改排序规则,可以输入比较函数。

代码语言:javascript
复制
//学号比较函数
bool Compare(const Student &stuA,const Student &stuB)
{
    return (stuA.getID()<stuB.getID());
}
int main()
{
    vector<Student> vecStu;
    vecStu.push_back(Student(2,"赵彤"));
    vecStu.push_back(Student(1,"王伟"));
    vecStu.push_back(Student(4,"李明"));
    vecStu.push_back(Student(3,"张燕"));
    sort(vecStu.begin(),vecStu.end(),Compare);
    for (vector<Student>::iterator it =  vecStu.begin();it!= vecStu.end();it++) {
        cout<<it->getName() <<endl;
    }
}

random_shuffle() random_shuffle: 对指定范围内的元素随机调整次序。

代码语言:javascript
复制
        srand(time(0));         //设置随机种子

        vector<int> vecInt;
        vecInt.push_back(1);
        vecInt.push_back(3);
        vecInt.push_back(5);
        vecInt.push_back(7);
        vecInt.push_back(9);

        string str("itcastitcast ");
    
        random_shuffle(vecInt.begin(), vecInt.end());   //随机排序,结果比如:9,7,1,5,3
        random_shuffle(str.begin(), str.end());        //随机排序,结果比如:" itstcasticat "

reverse()

代码语言:javascript
复制
        vector<int> vecInt;
        vecInt.push_back(1);
        vecInt.push_back(3);
        vecInt.push_back(5);
        vecInt.push_back(7);
        vecInt.push_back(9);
        reverse(vecInt.begin(), vecInt.end());      //{9,7,5,3,1}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.01.02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 查找算法
    • adjacent_find()
      • binary_search
        • count()
          • count_if()
            • find
              • equal_range:
              • 查找算法
                • sort()
                相关产品与服务
                容器服务
                腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档