1

文字列「123」のすべての順列を生成したいクラスがあります

文字列「123」、「321」、「132」などが必要です

このクラスでは、後で使用したいこれらすべての文字列を保持するベクトルを定義しました...

すべての順列を見つけるために使用する再帰は次のとおりです。

  findPermutations(char *set, int begin, int end){

     int i;
     int range = end - begin;
   if(range == 0) myvE.push_back(set); //notice how I want to update the vector
     else{

    for(i=0;i<range;i++){
        swap(set[begin],set[begin+i]);
        findPermutations(set,begin+1,end);
        swap(set[begin],set[begin+i]);
      }
     }
   }

範囲が 0 の場合、セットには次の順列のみが含まれます。その順列をベクトルに保存したいのですが、最終的に私のベクトルは「123」文字列でいっぱいです

ここで何が起こっているのか理解できません

誰かが私を助けてくれますか?

ありがとう

4

1 に答える 1

0

問題は、同じ文字列へのポインタをベクトルに複数回追加していることだと思います。つまり、ベクトルはまったく同じ文字列への複数のポインタを格納します。この文字列を再帰内で変更しているため、出力は同じ文字列に複数回なります。

これを修正するには、文字列のコピーをベクター内に保存するか、atd :: stringのようなタイプに切り替えて、ベクターに文字列を追加すると実際にコピーが作成されるようにすることを検討してください。

お役に立てれば!

于 2012-04-08T16:49:05.293 に答える