【发布时间】:2012-01-07 04:51:21
【问题描述】:
编辑:对不起,这只是我在下面的代码中初始化的错误。
const int kDigits = 7;
std::vector<int> number(kDigits);
for (int i = kDigits - 1; i >= 0; i--) {
number[i] = i + 1;
}
向量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 向后排列),在我看来应该没有。
非常感谢您提前提供的帮助!我期待着弄清楚我误解了什么/我错过了什么。
【问题讨论】:
标签: c++ algorithm stl permutation