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