C++ 洗牌QList的部分

C++ 洗牌QList的部分,c++,qt,qstring,qtcore,qlist,C++,Qt,Qstring,Qtcore,Qlist,我有一个列表,我想在这个列表中进行3次不同的洗牌,如下所示: 1º洗牌:前十项 2º洗牌:从第11项到第20项 3º洗牌:从第21项到最后 这就是我目前所做的: QList<QString> list; list << "a" << "b" << ... std::random_shuffle(list.begin(), list.begin()+10); list.takeFirst(); QString shuf

我有一个列表,我想在这个列表中进行3次不同的洗牌,如下所示:

  • 1º洗牌:前十项
  • 2º洗牌:从第11项到第20项
  • 3º洗牌:从第21项到最后
这就是我目前所做的:

QList<QString> list;

list << "a" << "b" << ...

    std::random_shuffle(list.begin(), list.begin()+10);
    list.takeFirst();
    QString shuffle1 = list.takeFirst();

    std::random_shuffle(list.begin()+11, list.begin()+20);
    list.takeFirst();
    QString shuffle2 = list.takeFirst();

    std::random_shuffle(list.begin()+21, list.end());
    list.takeFirst();
    QString shuffle3 = list.takeFirst();enter code here
QList列表;

list我不知道为什么在忽略第一项的同时删除了两项,但我认为主要的问题是,您试图按照项目完好无损的逻辑进行洗牌,而实际上在洗牌调用之间调用
list.takeFirst()
时删除了项目。因此,洗牌将不再像您可能期望的那样对原始文件起作用

以下是修复此问题的一些示例代码:

main.cpp 构建并运行 输出
谢谢你的回答,但我的问题不太清楚。首先,我使用了.takeFirst,因为我不想在洗牌中重复值。其次,范围不是固定的(前10个,然后是下8个,然后是下7个(我知道我写了10个范围(我的坏)).在所有这些之后,我将对列表中剩余的所有元素进行最后一次洗牌。并且不能重复。我是如何做到的?thks@Rafaelpsmed:请给出预期的输入和输出。希望能更容易理解您想要实现的目标。我现在觉得有点不理解。好的,是这样的:我有一个60人的列表项目。最终输出将是60个初始项目中的6个项目。首先,我需要洗牌前10个项目并选择一个,然后洗牌后9个项目并选择一个,然后洗牌后8个项目并选择一个。到目前为止有3个项目。接下来,我洗牌整个列表并选择3个项目。总共有6个项目。项目不能被删除repeated@Rafaelpsmed:interesting算法,但这到底是为了什么?当字符串存在于结果列表中时会发生什么?当您尝试拾取时,您正在尝试拾取下一个字符串?还有,到底是什么不起作用?仍然是
list.takeFirst();
根据您更新的问题描述,呼叫似乎没有意义。这是我父亲的彩票应用程序(他相信有些号码比其他号码好),这就是为什么我想洗牌列表的一部分(因为是他的“神奇号码”)然后是整个列表,就像我说的。如果list.takeFirst没有意义,我应该用什么把每次洗牌的结果放在一个字符串中显示给用户?
#include <QStringList>
#include <QDebug>
#include <algorithm>

int main()
{
    // You better generate this test data for 30 items...
    QStringList stringList{"a1", "b2", "c3", "d4", "e5", "f6"};
    static const int sliceSize = 2;

    for (int i = 0; i < stringList.size(); i+=sliceSize) {
        std::random_shuffle(stringList.begin() + i, stringList.begin() + (i+sliceSize-1));
        qDebug() << stringList.mid(i, sliceSize);
    }

    return 0;
}
TEMPLATE = app
TARGET = main
QT = core
CONFIG += c++11
SOURCES += main.cpp
qmake && make && ./main
("a1", "b2")
("c3", "d4")
("e5", "f6")