Как комментарий говорит, что это звучит, как вы хотите std::next_permutation, вот как его использовать:
int main()
{
std::vector<int> a{ 1, 2, 3 };
std::sort(a.begin(), a.end());
do {
std::cout << a << "; ";
} while (std::next_permutation(a.begin(), a.end()));
return 0;
}
Обратите внимание, что вам нужно перегрузку operator<<()
:
std::ostream& operator<<(std::ostream& s, const std::vector<int>& v)
{
for (auto&& item : v)
s << item;
return s;
}
Выход этой программы is
123; 132; 213; 231; 312; 321;
Вы можете даже сделать небольшую утилиту рутина:
void permutations(std::ostream& s, std::vector<int> a)
{
std::sort(a.begin(), a.end());
do {
s << a << "; ";
} while (std::next_permutation(a.begin(), a.end()));
}
permutations(std::cout, a);
std::cout << "\n";
permutations(std::cout, { 3, 1, 4, 2 });
Если вы действительно писать на C++, и вы «не знаете, сколько элементов в массиве,» вы должны использовать 'зЬй :: вектор a {1, 2, 3}; '. В любом случае вопрос, написанный как OT для SO, см. В [mcve] для деталей. –
Возможно, вы ищете ['std :: next_permutation'] (http://en.cppreference.com/w/cpp/algorithm/next_permutation) –