打乱QList的部分
Shuffle parts of a 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 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
但它不起作用。有什么想法吗?提前感谢!
我不知道为什么在忽略第一个的同时去掉两个项目,但我认为主要问题是,您试图用项目完整的逻辑进行混洗,而在混洗调用之间调用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")
相关文章:
- 如何检查QList中是否存在值
- 访问类 QList 指针的成员
- C++ template for QList
- 如何使用 QSortFilterProxyModel::sort 对 Qlist 中的数据进行排序
- QT 如何将 Qlist 传递给类构造函数
- 尝试在 qml 中访问结构成员的 QList
- 如何将 QString 的 QList 分配给列表视图?
- Qt5 - 如何将"QList<T> *"指针作为信号参数传递,并在完成后将其删除?
- 将 QList 转换为 QStringList 以插入到 QComboBox 中
- 如何将QGraphicsItem QList保存到文件中,然后读取它?Qt c++
- 从 json 字符串将 QVariant 转换为 QList<MyClass>
- 如何在 c++98 中通过特定字段在 QList 中查找对象?
- 在 QML 中读取 QList<QPoint>
- 具有QList功能的QT应用程序<QString>"append"
- 如何将对象/指针正确存储到 Qlist 中
- 为什么 std::sort 在使用 QList 时崩溃?
- QList::operator[]中的断言失败<T>:QJoysticks 中的"index out of range"
- 有效地随机打乱单词序列的位
- 为什么我不能像使用 std::string::size_type 那样使用 QList::size_type?(模板参数错误)
- 打乱QList的部分