gpt4 book ai didi

C++:难以掌握 std::next_permutation 和 std::prev_permutation 的工作

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:53:11 25 4
gpt4 key购买 nike

编辑:抱歉,这只是我在下面的代码中初始化时的错误。

const int kDigits = 7;
std::vector<int> number(kDigits);
for (int i = kDigits - 1; i >= 0; i--) {
number[i] = i + 1;
}

vector number 被初始化为 7, 6, 5, 4, 3, 2, 1
我的目标是以降序生成排列:7654321
7654312
7654231
7654213
7654132

此代码有效:

do {
...
}
while (std::prev_permutation(number.rbegin(), number.rend()));

但是,我不明白为什么。由于 7654321 是最大的字典顺序排列,不应该 while (std::prev_permutation(number.begin(), number.end()));(没有反向迭代器) 正确生成它,因为它会按顺序生成 previous 排列?但是,这会在第一次尝试时返回 false,即使它应该生成“较低的排列”。

此外,在上面显示的代码中,由于它使用反向迭代器,我的想法将其解释为找到 1234567 的前一个排列(7654321 向后),这似乎我应该没有。

非常感谢您的提前帮助!我期待弄清楚我误解了什么/我遗漏了什么。

最佳答案

vector number被初始化为1,2,3,4,5,6,7,而不是7,6,5,4,3 ,2,1。这就是您的代码有效的原因。

如果你想让它初始化为7,6,5,4,3,2,1,你需要修复初始化例程。

关于C++:难以掌握 std::next_permutation 和 std::prev_permutation 的工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8767458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com