C ++生成列表的不同排列?

时间:2018-02-27 04:42:58

标签: c++

您好我正在为C ++做一个任务,遗憾的是我的老师不能教我任何关于C ++的知识,所以我不得不求助于互联网来帮助我。

我很欣赏输出列表的所有排列的简单方法,例如,如果列表x有3个不同的值[1,2,3],输出= [1,2,3] ,[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]等...列表不一定有按顺序,只需要在列表中输出1,2,3的所有不同组合。就这样。 我已经在网上找了解如何做到这一点,没有多少运气理解。我已经看到人们使用向量和其他一些我对0%理解的东西。我喜欢复制并粘贴其他人的代码,但这对于本课程或任何使用C ++的地方都无济于事,因为我是唯一一个自愿学习这门语言的人。所以请尽量以外行的方式解释。如果有帮助,我正在使用C ++ 11。

这就是我自己的意思

std::cout << "\nPart 2: Enter a list of 3 numbers, press enter after each value: \n";
std::list<int> mylist1;
int v1;
int v2;
int v3;
std::cin >> v1 >> v2 >> v3; //input that will go into the list
mylist1.push_front(v1);
mylist1.push_back(v2);
mylist1.push_back(v3);

1 个答案:

答案 0 :(得分:0)

有一个功能,它被称为next_permutation

#include <algorithm>
#include <vector>
#include <iostream>

void show(const std::vector<int> &vtr) {
    for (auto val : vtr)  std::cout << val << " ";
    std::cout << "\n";
}

int main() {
    std::vector<int> vec{ 12,1,6,4,0 };
    std::sort(vec.begin(), vec.end());
    show(vec);
    while (std::next_permutation(vec.begin(), vec.end())) {
        show(vec);
    }
}