Qt学习笔记常用容器

简介: 主要说Qt的以下几种容器 1.QList 2.QLinkedList 3.Map 和一些常用的容器方法的使用 qSort qCopy qFind 1.QList泛型集合是最常用的一种容器 看一下它的常用 操作 添加删除和两个迭代器 QListIterator和QMutableL...

主要说Qt的以下几种容器

1.QList<T>

2.QLinkedList<T>

3.Map<T>

和一些常用的容器方法的使用

qSort

qCopy

qFind

1.QList<T>泛型集合是最常用的一种容器

看一下它的常用 操作

添加删除和两个迭代器

QListIterator和QMutableListIterator
复制代码
#include <QCoreApplication>
#include<QList>
#include<QDebug>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QList<int> listInt;

    //添加
    for(int i =0;i<10;i++)
    {
        listInt.append(i);
        //也可以这样添加元素
        //listInt<<i;
    }
    //删除
    qDebug()<<"删除3";
    listInt.removeAt(3);
    //查询
    foreach (int item, listInt) {
        qDebug()<<item;
    }


    qDebug()<<"Iterator";

    //迭代器
    QListIterator<int> iterator(listInt);
    while(iterator.hasNext())
    {

        qDebug()<<iterator.next();
        if(iterator.hasNext())
        qDebug()<<"the Next is :"<<iterator.peekNext();
    }
    //返转
    iterator.toBack();
    while(iterator.hasPrevious())
    {
        qDebug()<<iterator.previous();
    }
    qDebug()<<"可变迭代器QMutableListIterator";
    //可变的迭代器
    QMutableListIterator<int> mutableiterator(listInt);
    mutableiterator.insert(13);
    mutableiterator.insert(14);
    mutableiterator.insert(15);
    while(mutableiterator.hasNext())
    {
       int i=  mutableiterator.next();
       if(i==2||i==6)
       {
           mutableiterator.remove();
       }
    }

    //查询
    foreach (int item, listInt) {
        qDebug()<<item;
    }
    return a.exec();
}
复制代码

 

2.QLinkedList<T> 

QLinkedList<T>和QList<T>差不多,不同的一点是它是用迭代器做的访问项

也就是说QList<int> list只以通过这样访问它的内容list[i]而QLinkedList不可以只能用Iterator

性能上它要高于QList<T>

复制代码
#include <QCoreApplication>
#include<QLinkedList>
#include<QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QLinkedList<int> link;
    link<<1<<2<<2<<3<<4;
    qDebug()<<"迭代器访问QLinkedListIterator";
    QLinkedListIterator<int> iterator(link);
    while(iterator.hasNext())
    {
        qDebug()<< iterator.next();
    }
    //删除第一个2
    link.removeOne(2);
    //添加两个3这两种方式一样
    link.push_back(3);
    link.append(3);
    //删除所有的3
    link.removeAll(3);
    qDebug()<<"普通访问foreach";
    foreach (int item, link) {
        qDebug()<< item;
    }

    qDebug()<<"迭代器QMutableLinkedListIterator";
    QMutableLinkedListIterator<int> mutableIter(link);

    while(mutableIter.hasNext())
    {
        int i= mutableIter.next();
        if(i==1)
        {
            mutableIter.insert(90);
        }
        if(i==4)
        {
            mutableIter.remove();
        }
        qDebug()<<i;
    }
    qDebug()<<"迭代器QMutableLinkedListIterator重新访问";
    mutableIter.toFront();
    while(mutableIter.hasNext())
    {
        int i= mutableIter.next();
        qDebug()<<i;
    }
    //mutable
    return a.exec();
}
复制代码
a

3Map<T>

map类型是一个键值对 key/value组成 其它的和上边的两个集合没什么区别 

复制代码
#include <QCoreApplication>
#include<QMap>
#include<QDebug>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QMap<int,QString> map;
    map.insert(1,"a");
    map.insert(2,"b");
    map.insert(3,"c");
    QMutableMapIterator<int,QString> mutableIte(map);
    while(mutableIte.hasNext())
    {
        mutableIte.next();
        qDebug()<<mutableIte.key()<<" "<<mutableIte.value();
    }
    return a.exec();
}
复制代码

 

下边说一下常用的集合操作方法

qSort

qCopy

qFind

复制代码
#include <QCoreApplication>
#include<QList>
#include<QDebug>
#include<QVector>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QList<int> listStrs;
    listStrs<<10<<5<<8<<2<<7;
    qSort(listStrs);
    foreach (int i, listStrs) {
        qDebug()<<i;
    }
    qDebug()<<"____________________________";
    listStrs.clear();
    listStrs<<10<<5<<8<<2<<7;
    qSort(listStrs.begin()+1,listStrs.end()-1);
    foreach (int i, listStrs) {
        qDebug()<<i;
    }


    qDebug()<<"______________qCopy______________";
    QVector<int> newVec(5);
    qCopy(listStrs.begin(),listStrs.end(),newVec.begin());
    foreach (int i, newVec) {
        qDebug()<<i;
    }
    qDebug()<<"______________qFind______________";
    listStrs.clear();
    listStrs<<2<<5<<8<<2<<7;
    QList<int>::const_iterator iterFin=qFind(listStrs,2);
    if(iterFin!=listStrs.end())
    {
        qDebug()<<*iterFin;
    }
    else
    {
        qDebug()<<"notFound!";
    }
    return a.exec();
}
复制代码
 
作者:Bonker
出处:http://www.cnblogs.com/Bonker
QQ:519841366
       
本页版权归作者和博客园所有,欢迎转载,但未经作者同意必须保留此段声明, 且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利
目录
相关文章
快速生成软著申请时所需的60页代码文档的免费工具
本篇文章主要讲解,制作软著代码文档的高效方法,当然不可能手动一个个复制了,这显然太笨拙,他浪费时间了。这里我给大家介绍一个更快的方式。
10976 0
|
11月前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 API 网关 2025 年 4 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
阿里云微服务引擎 MSE 及 API 网关 2025 年 4 月产品动态
|
4月前
|
存储 JSON NoSQL
MongoDB常用命令
本文介绍MongoDB常用命令,涵盖数据库创建与删除(use、show dbs、dropDatabase)、集合操作(createCollection、drop)及文档的增删改查(insert、find、update、remove)。详解分页查询中limit、skip、sort用法及注意事项,适用于文章评论等数据管理场景。
|
9月前
|
前端开发 Java API
基于 Spring Boot 3 与 React 的 Java 学生信息管理系统从入门到精通实操指南
本项目基于Spring Boot 3与React 18构建学生信息管理系统,涵盖前后端开发、容器化部署及测试监控,提供完整实操指南与源码,助你掌握Java全栈开发技能。
436 0
|
XML 安全 Java
掌握SpringBoot单点登录精髓,一键通行多系统,轻松打造无缝用户体验新纪元!
【8月更文挑战第29天】单点登录(SSO)是一种身份认证机制,用户在多个相互信任的应用系统中只需登录一次即可访问所有系统,无需重复输入凭证。本文详细介绍如何利用Spring Security和OAuth2在SpringBoot中实现SSO,并提供示例代码。核心步骤包括:引入依赖、配置认证服务器与资源服务器、实现单点登录拦截器及完成SSO配置。通过合理配置,SSO能显著提升用户体验和系统安全性。
1198 2
|
自然语言处理 Java 程序员
【技术干货】根据身份证获取年龄,新手也能2分钟搞定~
作为程序员,我们经常需要处理各种数据,包括身份证号码。从身份证号码中提取年龄信息对于一些应用程序来说非常有用,例如进行用户认证、风险评估等。本文将从Java语言的角度探讨如何根据身份证获取年龄,主要包括函数设计和实现等方面的内容。
|
存储 搜索推荐 数据库
软件系统【标签tag功能】的两种数据库设计
软件系统中的标签功能可采用两种数据库设计。方案一,文章和Tag各一表,Tag信息存储在文章表内(`tags`和`tagids`字段),优点是模型简单,但查询效率低且易引发数据冗余和一致性问题。方案二,增加Tagmap表,用于存储标签-文章映射,利于索引查询和数据更新,适用于高效率需求,但结构更复杂。
1068 0
软件系统【标签tag功能】的两种数据库设计
|
负载均衡 安全 应用服务中间件
nginx配置ssl和反向代理的配置代码
【5月更文挑战第2天】nginx配置ssl和反向代理的配置代码
1083 3
|
文件存储
一篇文章讲明白LTE中的各种ID含义
一篇文章讲明白LTE中的各种ID含义
1282 0
|
数据可视化 数据库 C++
Qt 5.14.2揭秘高效开发:如何用VS2022快速部署Qt 5.14.2,打造无与伦比的Windows应用
Qt 5.14.2揭秘高效开发:如何用VS2022快速部署Qt 5.14.2,打造无与伦比的Windows应用
4637 0