QList用连续的存储空间存储一个列表的数据,可以通过序号来访问数据;
使用QList
QList list; //定义一个float类型的数据列表
QList list={1,2,3,4,5}; //初始化列表数据
QList list (100); //初始化列表元素个数为100,所有元素默认值为0;
QList strlist(10,"pass"); //初始化字符串列表有10个元素,每个元素初始化为"pass"
使用流操作符"<<"或函数append()向列表添加数据。此外,可以通过下标法和函数at()对链表中某一确定位置的元素进行访问;
QList strlist;
strlist<<"monday"<<"tuesday"<<"wednesday";
list.append("thursday");
QString str1=list[0]; //str1="monday"
QString str2=list.at(1); //str2="tuesday"
QStack类是QList类的子类,具有后进先出的特性;
QStack s; //定义一个int型栈
s. isEmpty(); //返回栈是否为空
s.size(); //返回当前栈中元素的个数
s.push(); //在栈顶上堆进一个元素
s.pop(); //删除掉栈顶上的元素,并返回这个元素
s.top(); //返回栈顶的元素,并不会删除
T & operator[] ( int i ); //以数组形式访问队列元素
QQueue继承自QList;QQueue是Qt库中的一个容器类,它是一个先进先出(FIFO)的队列,用于存储具有相同类型的数据。QQueue提供了一些常用接口,使得对队列进行操作变得非常简单。
QQueue Q; //定义一个int型队列
Q.isEmpty(); //返回队列是否为空
Q.size(); //返回队列元素个数
Q.clear(); //清空队列
Q.enqueue(); //在队列尾部添加一个元素, 比如插入数字5: Q.enqueue(5)
Q.dequeue(); //删除当前队列第一个元素,并返回这个元素
Q.head(); //返回当前队列第一个元素
Q.last(); //返回当前队列尾部的元素
T & operator[]( int i ); //以数组形式访问队列元素
#include
#include
#include
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// 1. 创建一个空的QQueue对象
QQueue queue;
// 2. 入队元素
queue.enqueue(10);
queue.enqueue(20);
queue.enqueue(30);
// 3. 获取队列大小
qDebug() << "Queue size:" << queue.size(); // 输出:Queue size: 3
// 4. 检查队列是否为空
qDebug() << "Queue is empty:" << queue.isEmpty(); // 输出:Queue is empty: false
// 5. 查看队列的头部元素
qDebug() << "Queue head:" << queue.head(); // 输出:Queue head: 10
// 6. 出队元素
int firstElement = queue.dequeue();
qDebug() << "Dequeued element:" << firstElement; // 输出:Dequeued element: 10
// 7. 获取队列中的第一个和最后一个元素
qDebug() << "First element:" << queue.first(); // 输出:First element: 20
qDebug() << "Last element:" << queue.last(); // 输出:Last element: 30
// 8. 检查队列是否包含特定值
qDebug() << "Queue contains 20:" << queue.contains(20); // 输出:Queue contains 20: true
// 9. 计算队列中特定值的个数
qDebug() << "Count of 20 in queue:" << queue.count(20); // 输出:Count of 20 in queue: 1
// 10. 清空队列
queue.clear();
qDebug() << "Queue size after clear:" << queue.size(); // 输出:Queue size after clear: 0
return a.exec();
}
是基于哈希表的模板类,它存储数据的顺序是不确定的,查找值速度快。
QSet set;
set<<"dog"<<"cat";
//测试一个值是否包含于某个集合,可用contains()函数
if(!set.contains("cat"))
...
QMap
/* 创建QMap实例, 第一个参数为QString类型的键,第二个参数为int类型的值 */
QMap map;
/* 插入数据 两种方式*/
map["math"] = 100;
map.insert("English", 99); /* 推荐 */
/* 移除数据 */
map.remove("math");
//使用运算符[]或函数value()来查找某个值
int num1=map["Math"];
int num2=map.value("Math");
//由键查找对应的值
int num=map.value("Math"); //num值为100
//由键值查找对应的键
QString k = map.key(100);
qDebug() << k; //输出Math
/* 通常一个键只对应一个值,如果再次调用insert()方法,会覆盖以前的值 */
map.insert("Math", 120);
qDebug() << map.value("Math"); //此时输出120
//查找是否包含某个键
bool isok = map.contains("Math");
qDebug() << isok;
//获取所有的键和键值
QList allKeys = map.keys();
qDebug() << allKeys;
QList allValues = map.values();
qDebug() << allValues;
/* 查看当前键和键值的数量 */
qDebug() << map.keys().size();
qDebug() << map.values().size();
QMap查找时要注意的问题(使用contains)https://it1995.blog.csdn.net/article/details/83504835?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2~default~CTRLIST~Rate-1-83504835-blog-115895547.235%5Ev38%5Epc_relevant_sort&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2~default~CTRLIST~Rate-1-83504835-blog-115895547.235%5Ev38%5Epc_relevant_sort&utm_relevant_index=1
提供了实现多值映射的接口函数,即一个键可以对应多个值;
// 可以使用QMultiMap类来实现一键多值
QMultiMap map1, map2, map3;
map1.insert("values", 100);
map1.insert("values", 220); //map1.size()==2
map2.insert("values", 330); //map1.size()==1
// 可以进行相加,这样map3的“values”键将包含100,220,330三个值
map3=map1+map2; //map1.size()==3
QMultiMap不提供[]运算符,可使用函数value()访问最新插入的键的单个值。如果获取一个键对应的所有值,可以使用函数values(),返回值是QList
QList myValues = map3.values("values");
qDebug() << "the values are: ";
for (int i=0; i