C++ STL常用算法

算法主要头文件:

      <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;
}

 

上一篇:4-9 Python字符串常考算法题


下一篇:C++基础随笔007——deque容器