一、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 */
iterator:迭代器(相似指針)。STL每一個類型都有特定專用迭代器。c++
set:自動去重。git
multiset:不去重,可重複。數組
multiset的erase(x)會清空所有這個數值的數。less
單點清空要用erase(find(x))ide
二、sort函數參數函數
#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; }
四、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));