とくにあぶなくないRiSKのブログ

危ないRiSKのブログだったかもしれない。本当はRiSKだけどググラビリティとか取得できるIDの都合でsscriskも使ったり。

std::next_permutation, std::prev_permutation

STL―標準テンプレートライブラリによるC++プログラミング 第2版

// P118 ex05-30.cpp
#include<iostream>
#include<vector>
#include<algorithm>
int main(){
 using std::cout;
 using std::endl;
 using std::vector;
 using std::copy;
 using std::ostream_iterator;
 using std::next_permutation;
 using std::reverse;
 using std::prev_permutation;
 cout << "Illustrating the generic permutation algorithms." << endl;
 const int N = 3;
 vector<int> v(N);
 for(int i = 0; i < N; ++i)v[i] = i;

 do{// 0, 1, 2 で始める
  copy(v.begin(), v.end(), ostream_iterator<int>(cout, " "));
  cout << endl;
 }while(next_permutation(v.begin(), v.end()));
 // false 返しながら,元の 0, 1, 2 で終わる。

 cout << endl;
 std::reverse(v.begin(), v.end());
 do{ // 2, 1, 0 から始める
  copy(v.begin(), v.end(), ostream_iterator<int>(cout, " "));
  cout << endl;
 }while(prev_permutation(v.begin(), v.end()));
 // false 返しながら,元の 2, 1, 0 で終わる
}

出力例:

Illustrating the generic permutation algorithms.
0 1 2
0 2 1
1 0 2
1 2 0
2 0 1
2 1 0

2 1 0
2 0 1
1 2 0
1 0 2
0 2 1
0 1 2