STL

一、set:ios

#include<bits/stdc++.h>
#define pf(a) printf("%d ",a)
#define phn puts("")
#define F(i,a,b) for(rg int i=a;i<=b;++i)
#define rg register
#define il inline
#define LL long long
using namespace std;
int read();
multiset<int>s;
int n,a[100010];
int main(){
    n=read();F(i,1,n)a[i]=read();
    s.clear();
    F(i,1,n)s.insert(a[i]);
    for(multiset<int>::iterator p=s.begin();p!=s.end();++p){
        printf("%d",*p);
    }
    phn;//1235778
    multiset<int>::iterator p;
    if((p=s.find(3))!=s.end()){
        s.erase(p);
    }
    s.erase(7);
    for(multiset<int>::iterator p=s.begin();p!=s.end();++p){
        printf("%d",*p);
    }
    phn;
    //1258
}
il int read(){
    int s=0;char ch;
    while(ch=getchar(),!isdigit(ch));
    for(;isdigit(ch);s=s*10+(ch^48),ch=getchar());
    return s;
}
/*
g++ 4.cpp -g
./a.out
7
5 3 1 8 2 7 7
*/
View Code

iterator:迭代器(相似指针)。STL每一个类型都有特定专用迭代器。c++

set:自动去重。git

multiset:不去重,可重复。数组

multiset的erase(x)会清空所有这个数值的数。less

单点清空要用erase(find(x))ide

二、sort函数参数函数

(1)start表示要排序数组的起始地址;
(2)end表示数组 结束地址的下一位
(3)cmp用于规定排序的方法,可不填,默认升序。
sort(a+1,a+n+1):对1~n排序。
sort(a,a+n):对1~n-1排序。
内部是快速排序,最坏n^2,通常nlog
三、nth_element:
做用:nth_element做用为求第n大的元素,并把它放在第n位置上,下标是从0開始计数的,也就是说求第0小的元素就是最小的数。
最坏n^2,通常O(n)
仅仅能肯定a[k]是数列中第k大的数,并将小于k的放在左边,大于的放在右边,但不保证左右两边的内部有序。
nth_element()函数不过将第n大的数排好了位置,并不返回值。
#include<iostream>
#include<algorithm>
using namespace std; 
int main()
{
    int a[]={1,3,4,5,2,6,8,7,9};
    int i;
    cout<<"数列例如如下:"<<endl;
    for(i=0;i<9;i++)
       cout<<a[i]<<" ";
    nth_element(a,a+5,a+9);
    cout<<endl<<"输出第五大的数: "<<a[4]<<endl; //注意下标是从0開始计数的 
    return 0;
}
View Code

 四、unique()返回数组end位置,即数组结尾的下一个位置。ui

  因此要减首地址(-a-1),获得数组大小。spa

  lower_bound返回查询元素在数组中位置,减去起始位置的上一个位置,即为排名。(-a)3d

  lower_bound:>= upper_bound >

五、priority_queue <int,vector<int>,greater<int> > q;小根堆

priority_queue <int,vector<int>,less<int> >q;大根堆

(不须要#include<vector>头文件

注意后面两个“>”不要写在一块儿,“>>”是右移运算符)

六、pow(x,k)函数:参数和返回值都是double,用于求几回幂,(开几回根)。

七、next_permutation:

不肯定是否须要sort.

 
 
sort(a+1,a+n+1);
do{

}while(next_permutation(a+1,a+n+1));
View Code
相关文章
相关标签/搜索