整数向量的整数

时间:2013-04-28 19:03:26

标签: c++ vector

调试此代码时遇到问题。你能帮帮我吗?谢谢!此代码正在实现整数向量的排列。我试图调试它并发现问题,但我不知道为什么它是错的。这段代码给了我运行时错误,当我在cv中插入“cur”后我试图打印内部向量“cv”时,它只是无法打印任何东西,但在插入之前,“cv”的内容可以打印出来。我很困惑,我错了。

#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;

 }

}

1 个答案:

答案 0 :(得分:4)

    for(it=temp[i].begin(); it!=temp[i].end(); it++){
....  

        cv.insert(it, cur);  

您使用temp中的迭代器来设置cv内的位置 还

     for(int i=0; i<ret.size(); i++){
       for(int j=0; j<ret[i].size(); i++) cout<<ret[i][j];
//                                   ^ I believe j meaned