2

常用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!]

posted @ 2017-05-10 17:34  DDYYZZ  阅读(349)  评论(0编辑  收藏  举报