algorithm:算法。裏面有着許許多多的黑科技。一個一個來看
1:algorithmの全排列
說到全排列,恐怕想起的就是那搜索了。那麼,algorithm庫裏還有一個神♂ 奇的東西叫next_permutation,即是生成全排列的函數。它內部實現是用生成法實現的,所以速度>搜索的速度。
格式:next_permutation(起始位置,結束位置);
關於int的next_permutatione
int a[101];
for(int i=1;i<=5;i++) a[i]=i;
do
{
for(int i=1;i<=5;i++) cout<<a[i]<<" ";
cout<<endl;
}while(next_permutation(a+1,a+1+5));//生成1-5的全排列
關於string的next_permutation
string s="aacc";
do
{
cout<<s<<endl;
}
while(next_permutation(s.begin(),s.end()));//產生"aacc"的全排列
trip:next_permutation可以處理重複元素的全排列喲!例如aacc
2:algorithmのsort
排序有很多種做法。比如冒泡啊、選擇啊、並歸呀等等。但是目前公認爲在一般情況下綜合性最強的就是快排(快速排序)。在C++中,STL已經封裝好了一個東西叫sort,那麼那麼好的東西怎麼可以不掌握呢?
格式:sort(起始位置,結束位置,規則);
關於系統默認排序規則的sort
int a[101];
for(int i=1;i<=10;i++) a[i]=i;
sort(a+1,a+1+10); //不加規則域的時候,默認從小->大
for(int i=1;i<=10;i++) cout<<a[i]<<" "; cout<<endl;
sort(a+1,a+1+10,less<int>()); //加此規則後,變爲從小->大。等價於不加
for(int i=1;i<=10;i++) cout<<a[i]<<" "; cout<<endl;
sort(a+1,a+1+10,greater<int>()); //加此規則後,變爲從大->小
for(int i=1;i<=10;i++) cout<<a[i]<<" "; cout<<endl;
關於自定義排序規則的sort
struct Stu{int dis,num;}a[101];//記得要全局
sort(a+1,a+1+10,cmp); //cmp爲一個自定義的函數,作爲排序的規則
//一般用自定義規則,多是用於結構體。
//記住,函數類型是bool
for(int i=1;i<=10;i++) cout<<a[i].num<<" "; cout<<endl;
//cmp函數內容如下
bool cmp(Stu a,Stu b)
{
return a.dis>b.dis;//規則:dis越大的,排前面
}