next_permutation과 prev_permutation을 이용
next_permutation
오름차순의 배열을 기반으로 순열을 만들 수 있다.
prev_permutation
내림차순의 배열을 기반으로 순열을 만들 수 있다.
매개변수로는 순열을 만들 범위를 가리키는 [first,last)
순열을 시작할 범위의 첫번째 주소, 그리고 포함되지 않는 마지막 주소
int a[3] = {1, 2, 3};
void print(vector<int> &v)
{
for (int i = 0; i < v.size(); i++)cout << v[i] << " ";
cout << "\n";
}
int main()
{
vector<int> v;
for (int i = 0; i < 3; i++)v.push_back(a[i]); // 1 2 3
do
{
print(v);
} while (next_permutation(v.begin(), v.end()));
cout << "----------"<< "\n";
v.clear();
for (int i = 2; i >= 0; i--)v.push_back(a[i]); // 3 2 1
do
{
print(v);
} while (prev_permutation(v.begin(), v.end()));
}
next_permutation
을 쓰려면 요소가 오름차순 정렬되어있어야하고
prev_permutation
을 쓰려면 요소가 내림차순 정렬되어있어야 한다.
그리고 permutation 함수의 두 번째 매개변수는 포함되지않는 마지막 주소이기 때문에 v.end()
가 들어갈 수 있다.
(end()는 해당 리스트의 마지막 요소보다 한칸 뒤의 주소값을 가리킨다.)