有的人用C++ algorithm庫中的next_permutation()函數得到全排列時發現最後得到的全排列老是不夠數,不知道為什麼,還以為標准庫函數有錯呢,其實這個標准庫函數是有前置條件的,即參數必須是為非降序排列的。
至於為什麼,我們看下邊。
next_permutation()函數對參數進行下一個排列,如果到頭了返回false,否則返回true,
但是它怎麼知道排列到頭了呢,原來他是按照增序對參數的每一個值進行排列的,如果參數為完全降序的話,就認為到頭了,會返回false。
所以我們在求排列的時候一定要先進行升序排序,這樣才能正確的得到所有的排列方式。
如string s="bca";
sort(s.begin(),s.end());
cout<<s<<endl;
while(next_permutation(s))
{
cout<<s<<endl;
}
如果想了解next_permutation的實現原理,可以參考
C++ STL next_permutation的實現原理 http://www.linuxidc.com/Linux/2013-04/82498.htm