У меня проблемы с отладочным кодом. Не могли бы вы мне помочь? Спасибо! Этот код реализует перестановку вектора ints. Я попытался отладить его и нашел проблему, но я не знаю, почему это неправильно. Этот код дает мне ошибку времени выполнения и когда я пытался распечатать то, что находится внутри вектора «cv» после того, как я вставляю «cur» в cv, он просто ничего не может напечатать, но перед вставкой содержимое «cv» может быть распечатано , Я смущен, когда я ошибаюсь.Перестановка вектора ints
#include<iostream>
#include<vector>
using namespace std;
vector<vector<int> > permutation(vector<int> &v){
vector<vector<int> > ret;
if(v.empty()) {
return ret;
}
if(v.size()==1){
int cur=v.back();
v.pop_back();
vector<int> cv;
cout<<"cur "<<cur<<endl;
cv.push_back(cur);
ret.push_back(cv);
return ret;
}
int cur=v.back();
v.pop_back();
vector<vector<int> > temp=permutation(v);
vector<int>::iterator it;
cout<<"temp.size() "<<temp.size()<<endl;
for(int i=0; i<temp.size(); i++){
for(it=temp[i].begin(); it!=temp[i].end(); it++){
//for(int p=0; p<temp[i].size(); p++) cout<<temp[i][p];
//cout<<endl;
vector<int> cv(temp[i]);
//for(int p=0; p<cv.size(); p++) cout<<cv[p];
//cout<<endl;
cv.insert(it, cur);
for(int p=0; p<cv.size(); p++) cout<<cv[p];
cout<<endl;
ret.push_back(cv);
}
vector<int> cv(temp[i]);
cv.push_back(cur);
ret.push_back(cv);
}
return ret;
}
int main(){
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
vector<vector<int> > ret=permutation(v);
for(int i=0; i<ret.size(); i++){
for(int j=0; j<ret[i].size(); i++) cout<<ret[i][j];
cout<<endl;
}
}
Если это не что-то вроде домашнего задания, где нужно сделать все по своему усмотрению, вы можете посмотреть на 'std :: next_permutation' и/или' std :: random_shuffle'. –
Спасибо, но на самом деле мне нужно реализовать пермутацию. – diane