Qt容器类的说明与使用

Qt容器类的说明与使用_第1张图片

 1 QList类

QList用连续的存储空间存储一个列表的数据,可以通过序号来访问数据;

使用QList定义一个元素类型为T的列表,定义列表时还可以初始化列表数据或列表的大小;

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"

2 QStack类

 QStack类是QList类的子类,具有后进先出的特性;

QStack  s;                         //定义一个int型栈
s. isEmpty();                           //返回栈是否为空
s.size();                                //返回当前栈中元素的个数  
s.push();                                //在栈顶上堆进一个元素
s.pop();                                 //删除掉栈顶上的元素,并返回这个元素
s.top();                                //返回栈顶的元素,并不会删除  
T &  operator[] ( int i );            //以数组形式访问队列元素

3 QQueue类

QQueue继承自QList;QQueue是Qt库中的一个容器类,它是一个先进先出(FIFO)的队列,用于存储具有相同类型的数据。QQueue提供了一些常用接口,使得对队列进行操作变得非常简单。

Qt容器类的说明与使用_第2张图片

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();
}

4 QSet类

是基于哈希表的模板类,它存储数据的顺序是不确定的,查找值速度快。

QSet set;
set<<"dog"<<"cat";
//测试一个值是否包含于某个集合,可用contains()函数
if(!set.contains("cat"))
...

5 QMap类

QMap定义字典(关联数组),一个键映射一个值。QMap是按照键的顺序存储数据的,如果不在意存储顺序,使用QHash会更快;

/* 创建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

6 QMultiMap类

提供了实现多值映射的接口函数,即一个键可以对应多个值

// 可以使用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

你可能感兴趣的:(QT编程学习,c++,qt)