使用next_permutation函数后如何保存字符串/整数?

时间:2015-07-25 08:54:19

标签: c++

我对c ++完全不熟悉,在解决问题时我必须置换一个数字。我发现最简单的方法是使用C ++的next_permutation函数。但为此我需要将其转换为字符串并再次返回整数。问题是,在排列完成后,我无法将所有置换的数字存储在数组中。它只保存最后打印的数字。

str = "131";
std::sort(str.begin(), str.end());
do
{
    std::cout<<str<<endl;
    int number;
    istringstream(str)>>number;
    for(int z=0;z<3;z++)
    {
        saveInArray[z]=number;
    }

} while( std::next_permutation(str.begin(), str.end()));

2 个答案:

答案 0 :(得分:1)

以下代码与您的代码等效,只是它使用简单的整数循环而不是next_permutation()来生成数字:

int saveInArray[4];
// generate
for(int i=0; i!=4; ++i) {
    for(int k=0; k!=4; k++) {
        saveInArray[k] = i;
    }
}
// output
for(int k=0; k!=4; ++k) {
    std::cout << saveInArray[k] << std::endl;
}

请阅读此代码并考虑其输出结果。然后,运行代码并将其与您的期望进行比较。它应该向您展示您的代码如何根本不执行您想要的操作,从那里也应该清楚原因。

请注意,建议使用容器是由于排列的数量,这完全不是像上面4那样的固定数字!

答案 1 :(得分:0)

next_permutation()可以在任何具有双向迭代器的标准库容器上使用。它似乎也适用于根据this显示的数组:

int myints[] = {1,2,3};
std::next_permutation(myints,myints+3)

因此,您可以使用基本数组而不是具有双向迭代器的STL容器(例如std :: vector和std :: list)。