欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C++ STL常用算法

程序员文章站 2022-03-05 20:29:31
...

算法主要头文件:

      <algorithm>  体积最大,涉及比较,交换,查找,遍历操作,复制,修改等  

      <numeric>    体积小,简单数据运算模板函数

      <functional> 定义模板类,声明函数对象

常用遍历算法

       for_each( iterator beg,iterator end,_func )         //遍历容器

       transform( iterator beg1,iterator end1,iterator beg2,_func )       //搬运容器到另一个容器中

#include<algorithm>
#include<vector>

class ToDo
{
   public:
   int operator(int v)
   {
      return v;
   }
}

toDo(){}


int main()
{
    vector<int> v;
    for(int i=0;i<10;i+)
        v.push_back(i);

    //for_each遍历
    for_each(v.begin(),v.end(),toDo);
    //for_each(v.begin(),v.end(),ToDo());    //ToDo为仿函数

    //transform搬运
    vector<int>  vTarget; //目标容器
    vTarget.resize(v.size());    //提前开辟空间
    transform(v.begin(),v.end(),vTarget.begin);
    //transform(v.begin(),v.end(),vTarget.begin,ToDo());     //ToDo为仿函数(逻辑运算)

     

    system("pause");
    return 0;
}

常用查找算法

      find( iterator beg,iterator end,value )                         //查找元素(返回 迭代器)找到一个即停止

      find_if( terator beg,iterator end,_Pred )                     //按条件查找元素(返回 迭代器)找到一个即停止

      adjacent_find( terator beg,iterator end )                   //查找相邻重复元素(返回 [第一位置]迭代器)

      binary_search(terator beg,iterator end,value )        //二分查找法 (仅有序序列,返回 bool)

      count( terator beg,iterator end )                                //统计某元素个数(返回 个数)

      count_if( terator beg,iterator end,_Pred )                 //按照条件统计元素个数

#include <vertor>
#include <algorithm>

class GreaterFive
{
 public:
    bool operator(int val)
    {
       return val > 5;
    }
}

int main()
{
    vertor<int> v;
    for(int i=0;i<10;i++)
        v.push_back(i);

    //find()
    vertor<int>:: it1 = find(v.begin,v.end(),5);
    if(it == v.end()){}   //未找到

    //find_if()
    vertor<int>:: it2 = find_if(v.begin,v.end(),GreaterFive());    //greater()内仿函数
    if(it == v.end()){}   //未找到

    vertor<int> v1;
    v1.push_back(4);
    v1.push_back(1);
    v1.push_back(3);    //返回位置
    v1.push_back(3);
    v1.push_back(2);
    //adjacent_find()
    vertor<int>:: it3 = adjacent_find(v1.begin,v1.end());  
    if(it == v.end()){}   //未找到

    //binary_search
    bool flag = binary_search(v.begin,v.end(),5);

    //count
    int num1 = count(v1.begin,v1.end(),3);

    //count_if
    int num2 = count_if(v.begin,v.end(),GreaterFive());

    system("pause");
    return;
}

常用排序算法

       sort( terator beg,iterator end,_Pred                                                                     //对容器内元素排序

       random_shuffic( terator beg,iterator end                                                           //洗牌,范围里随机调整位置

        merge(terator beg1,iterator end1 ,terator beg2,iterator end2 ,iterator dest       //容器元素合并,储存到另一容器(两容器必须有序)

        reverse( terator beg,iterator end                                                                         //反转指定范围的元素

#include <vertor>
#include <algorithm>
#include <functional>

int main()
{
    vertor<int> v,v2;
    for(int i=0;i<10;i++)
        v.push_back(i);
    for(int i=10;i<30;i++)
        v2.push_back(i);

    //sort
    sort(v.begin,v.end());
    sort(v.begin,v.end(),greater<int>());    //降序

    //random_shuffic
    random_shuffic(v.begin,v.end());

    //merge
    vertor<int> newV;
    newV.resize(v.size()+v2.size());    //开辟空间
    merge(v.begin,v.end(),v2.begin,v2.end(),newV.begin())

    //reverse
    reverse(v.begin,v.end());

    system("pause");
    return 0;
}

 

相关标签: C++ c++