歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

C++ STL algorithm庫中 next_permutation()用法 注意事項

有的人用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

Copyright © Linux教程網 All Rights Reserved