我对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()));
答案 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)。