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
相關文章
相關標籤/搜索