我猜你正在寻找std::next_permutation()
:
#include <iostream>
#include <algorithm>
#include <vector>
int main()
{
std::vector<int> simple{1, 2, 3};
do
{
for (auto e : simple) { std::cout << e << " "; }
std::cout << std::endl;
}
while (next_permutation(simple.begin(), simple.end()));
}
这是live example。
如果你不想开始一个排序的载体,可以使用std::next_permutation()
方式如下:
#include <iostream>
#include <algorithm>
#include <vector>
constexpr int factorial(int i)
{
return i == 0 ? 1 : i * factorial(i-1);
}
int main()
{
std::vector<int> simple{3, 1, 2};
for (int i = 0; i < factorial(simple.size()); i++)
{
std::next_permutation(simple.begin(), simple.end());
for (auto e : simple) { std::cout << e << " "; }
std::cout << std::endl;
}
}
这里是一个live example。
注意,如果向量的大小在编译时是已知的,似乎是从你的榜样的情况下,你可以使用的std::array
代替std::vector
,如图this live example。
你尝试过什么吗? –
使用['std :: next_permutation'](http://en.cppreference.com/w/cpp/algorithm/next_permutation)。 –
如果你想使用boost:http://www.boost.org/doc/libs/1_38_0/libs/iterator/doc/permutation_iterator.html – citykid