template <class BidirectionalIterator>
inline constexpr bool next_partial_permutation(BidirectionalIterator first,
BidirectionalIterator middle,
BidirectionalIterator last)
{
using std::reverse;
reverse(middle, last);
return std::next_permutation(first, last);
}
//
int main(void)
{
std::vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
int i = 1;
// middle = v.begin() + 3 (3表示从4个数中取3个数进行排列)
std::vector<int>::iterator first = v.begin(), middle = v.begin() + 3, last = v.end();
do {
// do stuff with elements in range first...middle (but dont change them)
wstring str = to_wstring(v.at(0));
OutputDebugStringW(str.c_str());
OutputDebugStringW(L" ");
str = to_wstring(v.at(1));
OutputDebugStringW(str.c_str());
OutputDebugStringW(L"---");
str = to_wstring(i);
OutputDebugStringW(str.c_str());
//OutputDebugStringW(L" ");
//str = to_wstring(v.at(2));
//OutputDebugStringW(str.c_str());
OutputDebugStringW(L" \r\n");
++i;
} while (next_partial_permutation(first, middle, last));
}