在运行递归函数时将新元素插入向量的麻烦

时间:2012-04-08 15:47:21

标签: c++ algorithm recursion vector permutation

我有一个类,我想生成字符串“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]);
      }
     }
   }

如果range为0,则该集合将具有下一个排列。我想将这个排列存储在向量中,但最后我的向量中充满了“123”字符串

我无法理解这里发生了什么

有人可以帮帮我吗?

感谢

1 个答案:

答案 0 :(得分:0)

我认为问题在于你多次向向量添加一个指向同一个字符串的指针,这意味着你的向量将存储多个指向完全相同字符串的指针。因为你在递归中改变了这个字符串,所以输出将是多次相同的字符串。

要解决此问题,请考虑将字符串的副本存储在向量中,或者切换到类似atd :: string的类型,以便将字符串添加到向量实际上为您创建副本。

希望这有帮助!