Я пытаюсь напечатать все перестановки вектора строк. Этот код работает как задумано:next_permutation вектора строк пропускает одну перестановку
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main() {
vector<string> v;
v.push_back("+1");
v.push_back("x4");
do {
cout << v[0] << " " << v[1] << endl;
} while (next_permutation(v.begin(), v.end()));
}
Выход:
+1 x4
x4 +1
Но когда я изменяю "x4" для итерации "* 4" Петли next_pemutation только один раз.
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main() {
vector<string> v;
v.push_back("+1");
v.push_back("*4");
do {
cout << v[0] << " " << v[1] << endl;
} while (next_permutation(v.begin(), v.end()));
}
Выход:
+1 *4
Другие символы, такие как #, кажется, имеет тот же эффект. Почему это происходит?
Он должен начать отсортированный пройти через все из них. – chris
«Следующий» означает «следующий в определенном порядке всех перестановок». –
На самом деле, пожалуйста, сначала объясните нам, какая часть [документации] (http://en.cppreference.com/w/cpp/algorithm/next_permutation) вы не понимаете, поэтому мы можем дать полезный ответ. –