stdnext 排列

template< class Iterator >
bool next_permutation( Iterator first, Iterator last );
template< class Iterator, class Compare >
bool next_permutation( Iterator first, Iterator last, Compare cmpFun );

效果:
將範圍[first,last]的資料序列篩選到下一個按字典順序排列的更高排列。如果提供了 cmpFun,則自定義排列規則。

引數:
first-要置換的範圍的開頭,包括
last - 要置換的範圍的結尾,獨佔

返回值:
如果存在此類排列,則返回 true。
否則,範圍被轉換為按字典順序排列的最小排列並返回 false。

複雜度:
O(n),n 是從 firstlast 的距離。

示例

std::vector< int > v { 1, 2, 3 };
do
{
   for( int i = 0; i < v.size(); i += 1 )
   {
       std::cout << v[i];
   }
   std::cout << std::endl;
}while( std::next_permutation( v.begin(), v.end() ) );

以字典順序遞增的順序列印 1,2,3 的所有排列情況。
輸出:

123  
132
213
231
312
321