c++ - 字符串实现的排列问题

标签 c++ stl runtime-error

我正在研究字符串问题的所有排列。目前,我正在使用一个 char 列表来表示一个字符串。字符列表的列表将表示所有可能的排列。

算法非常简单。对于每个长度为 n 的字符串,您可能希望砍掉第一个字母并找到 n-l 字符串的所有排列。然后你会在较小的字符串的每个地方插入第一个字母。插入第一个字母导致运行时异常,我似乎无法弄清楚在哪里。

main.cpp

#include <vector>
#include <list>

using namespace std;

int main (void){

    list<char> s;

    s.push_back('f');
    s.push_back('c');
    s.push_back('g');

    list<list<char> > mylist;
    list<char>::iterator vit;
    list<char> myvector;
    mylist = perm(s,mylist);


    for(list<list<char> >::iterator it = mylist.begin(); it != mylist.end(); ++it){
        myvector = *it;
        for(vit = myvector.begin(); vit != myvector.end(); ++vit){
            cout << *vit << " ";
        }
        cout << "\n" << endl;
    }

    getchar();
    return 0;   
}

实现:

list<list <char> > perm(list<char> s, list<list<char> > mylist){
    int n = s.size();

    if(n == 1){
        mylist.push_back(s);
        return mylist;

    }

    else{
        list<char>::iterator vit = s.begin();
        char first = *vit;
        s.erase(vit);        

        list<list<char> > listB = perm(s,mylist);

        for(list<list<char> >::iterator it = listB.begin(); it != listB.end(); ++it){
            list<char> myvector = *it;
            for(list<char>::iterator vit2 = myvector.begin(); vit != myvector.end(); ++vit){
                cout << *vit2 << endl;
                vit2 = myvector.insert(vit2,first);
                cout << *vit2 << endl;
                mylist.push_back(myvector);
                myvector.erase(vit2);
            }
        }

        return mylist;
    }

}

输出:

                g
                c
                c
                f
                f

然后是运行时异常。

最佳答案

tl;博士

只需使用std::next_permutation

关于c++ - 字符串实现的排列问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14062789/

相关文章:

c++ - (C++ 错误 : pointer being freed was not allocated) for linked lists

c++ - 为枚举类覆盖 C++20 宇宙飞船运算符

c++ - 将 NULL 对象插入 std::vector

Python TypeError 需要 2 个位置参数,但给出了 3 个

excel - 尝试删除工作簿中的所有工作表,然后使用 VBA 添加其他工作表

java.lang.NullPointerException错误,如何修复?

c++ - 如何在 Internet 临时文件夹中创建 .txt 文件?

c++ - 使用 Qt 下载文件?

c++ - std::move 触发析构函数?

c++ - 使用 STL 容器在 logN 中插入、查找最小值(键)和删除(基于值)功能?