c++ - 旋转QList的部分

  显示原文与译文双语对照的内容
0 0

我有一个列表,希望在这里列表中设置 3不同的洗牌:

这是我目前所做的:


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

但它不起作用任何想法? 提前致谢!

时间: 原作者:

0 0

我不确定为什么你忽略了两个项目,但是我认为主要问题是你在调用 list.takeFirst() 之间的逻辑。 因此,洗牌不会再像你所期望的那样在原始上工作。

下面是修复这里问题的一些示例代码:

main.cpp


#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;
}

main.pro


TEMPLATE = app
TARGET = main
QT = core
CONFIG += c++11
SOURCES += main.cpp

生成并运行


qmake && make &&./main

输出


("a1","b2")
("c3","d4")
("e5","f6")

原作者:
...