zoukankan      html  css  js  c++  java
  • 常用stl(c++)

    众所周知,c++的模板库是相当强大的。

    下面我来列举一些常用的,(神奇的)

    //部分材料选自《算法竞赛入门经典(第2版)》(刘汝佳)

    一,algorithm (算法)

      min(a,b)-----------取最小值

         max(a,b)-----------取最大值

    //当然在实际应用当中可能无法直接使用,这时候我们需要自己编写函数

    例:

    #include<iostream>
    #include<cstdio>
    using namespace std;
    struct node
    {
        int x,y;
    } e[1001];
    int max(int z1,int z2)
    {
        if(e[z1].x==e[z2].x)
        {
            if(e[z1].y>=e[z2].y)return z1;
            else return z2;
        }
        else 
          if(e[z1].x>e[z2].x)return z1;
          else return z2;
          /*-----------------
          以x为第一关键字,y为第二关键字,比叫结构体e[z1],e[z2].
          -------------------*/
    }
    int main()
    {
        cin>>e[1].x>>e[1].y;
        cin>>e[2].x>>e[2].y;
        cout<<max(1,2);
        return 0;
    }

       sort(int first,int last,int cmp)----------将[first,last)这样一个左闭右开的区间进行排序(默认从小到大)

      运用自定义的cmp函数,可以将它的排序自定义

      例:

    int cmp(node x,node y)
    {
        return x.a==y.a?x.b<y.b:x.a<y.a;
    }

      全例:

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    int cmp(int a,int b)
    {
        return a<b;
        /*--------------
        若a<b,表示从小到大排序
        若a>b,表示从大到小排序*/
    }
    int a[1001];
    int n;
    int main()
    {
        cin>>n;
        for(int i=0;i<n;i++)
        cin>>a[i];
        sort(a,a+n,cmp);
        /*----------
        表示排序a[0-(n-1)]这些数
        正好与我们的存储方式相同*/ 
        for(int i=0;i<n;i++)
        cout<<a[i];
        return 0;
    }

      lower_bound(first,last,element)--------查找第一个大于等于element的数所在的位置

      upper_bound(first,last,element)-------查找第一个大于element的数所在的位置

    int p2=lower_bound(a,a+8,2)-a;
        /*因为指针是有增减性的,
            而它这里返回的是位置,
            减去a这个数组所在的位置
        ,就是这个数在数组里的位置 */ 
    cout<<a[p2];

      前提:必须是有序区间

    //借图于流沙-岁月的博客

    这是查找顺序

    补充一点内容:迭代器(iterator)

    度娘翻译:迭代器(iterator)有时又称游标(cursor),是程式设计的软件设计模式,可在容器物件(container,例如链表或阵列)上遍访的接口,设计人员无需关心容器物件的内容。它可以把抽象容器和通用算法有机的统一起来。

    看不懂对不对?我也不懂。  

      简单来说,就是指向STL里容器的一个指针,返回其位置

      定义:vector<int> ::inerator p;(红色为必写内容)

      基本用法和指针一样,记录位置。

      '*'取该位置的值,'&'取这个位置

    vector<int> ::inerator p;
    p="位置";
    p=*"位置"

       大概就是这样。

    这样我们STL的两大内容就都说完了,关于容器,我们下次在说

    byebye!(o゜▽゜)o☆[BINGO!]

    我博客里有大量的从别的博客复制过来的代码,分析,以及理解,但我一律会在文章后面标记原博客大佬博客名,其中部分会加以连接。 绝无抄袭的意思,只是为了我在复习的时候找博客方便。 如有原作者对此有不满,请在博客留言,我一定会删除该博文。
  • 相关阅读:
    CREATE AGGREGATE
    技术文档列表
    jQuery 判断表单中多个 input text 中至少有一个不为空
    Java实现 蓝桥杯 算法提高 奥运会开幕式
    Java实现 蓝桥杯 算法提高 最长滑雪道
    Java实现 蓝桥杯 算法提高 最长滑雪道
    Java实现 蓝桥杯 算法提高 最长滑雪道
    Java实现 蓝桥杯 算法提高 最大值路径
    Java实现 蓝桥杯 算法提高 最大值路径
    Java实现 蓝桥杯 算法提高 最大值路径
  • 原文地址:https://www.cnblogs.com/ZDHYXZ/p/ZDHYXZ.html
Copyright © 2011-2022 走看看