Qt的容器

这个和C++的容器大致相同,就不详细分析了。

顺序容器:

QList <T>最常用的容器(双端数组),可以根据索引访问,QStringList==QList<QString>
QLinkedList<T> 和QList相比,QLinkedList 可以使用迭代器
QVector<T>内存相邻位置存储,且给定类型的值的数组(单端数组)
QStack<T>

QQueue<T>队列
QSet<T>提供一个可以快速查询单值的数学集

关联容器:使用键对的方式存储<key,data>

QMap<key,T>关联容器,使用键的顺来存储数据,

QMultiMap<key,T>

是QMap的一个便捷类,一个键可以关联多个值
QHash<key,T>和QMap相似,QHash的数据是以任意的顺序存储的,查找速度快
QMulitHash<key,T>QHash的一个便捷类,提供了实现多值散列的接口函数

容器添加数据的方式:

以QList为例

使用   <<  添加数据

    QList<int>list;
    list<<123<<234<<345;//添加3个数据
    for(int i=0;i<10;i++)//添加
    {
        list<<i;
    }


    for(auto i:list)//C++11遍历(通用)
    {
        qDebug()<<i;
    }

 使用迭代器遍历容器:

  • iterator  正常迭代器
  • const_iterator  只读迭代器
    QList<int>::iterator it;
    for(it=list.begin();it!=list.end();it++)
    {
        qDebug()<<*it;
    }

foreach关键词

遍历顺序容器:

    QList<int>list1;
    list1<<10<<20<<30;
    foreach(int i,list1)
    {
        qDebug()<<i;
    }

遍历关联容器:

有序容器:

    QMap<int,int>map;
    map.insert(10,20);
    map.insert(100,30);
    map.insert(1000,40);
    foreach(int i,map.keys())//获取全部键值
    {
        qDebug()<<map.value(i);
    }

无序容器:

    QMultiMap<QString,int>mmap;
    mmap.insert("10",20);
    mmap.insert("10",30);
    mmap.insert("10",40);
    QList<QString>keys=mmap.uniqueKeys();//获取所有的键
    foreach(QString s,keys)//遍历所有的键
    {
        foreach(int i,mmap.values(s))//遍历键中所有的值
        {
            qDebug()<<i;
        }
    }

常用算法:

头文件:#include<QtAlgorithms>

qBinaryFind 二进制查找
qCopy复制
qCopyBackward向后复制
qEqual相等
qFill填充

qFind

查找
qCount计数
qSort排序
qStableSort稳定排序
qLowerBound下限
qUpperBound上限
qLess小于
qGreater大于

在头文件:#include<QtGlobal>中含有一些其他的常用的函数

  • qMax() 两数最大值
  • qMin()  两数最大值
  • qBound() 边界
  • qrand() qsrand()  随机数
  • 等函数

QString(字符串)

隐式共享:

隐式共享又称写时复制,一个共享类由指向一个共享数据块的指针和数据组成,共享数据块中包含一个引用计数。引用计数在对象被创建时为1,当有新对象引用数据时,引用计数会+1,当引用计数为0时,自动销毁数据。(智能指针)

深复制和浅复制:

  • 浅复制:复制一个引用
  • 深复制:需要消耗内存和资源

共享的好处:程序不需要进行不必要的数据复制,可以减少数据复制,使用更少的内存,对象可以很容易地被分配,或者作为参数被传递 ,或者从函数被返回。

常见的隐式共享类有: 

QButeArray、QCursor、QFont、QPixmap、QString、QUrl、QVariant、所有容器类等

QString常用的函数:

[ ]下标访问
append()末尾添加数据
replace()替换
insert()插入
+拼接
trimmed()去除两端空白字符
simplified()除去两端和中间多余的空白字符
split()拆分字符
isEmpty()判空
right()右侧字符
left()左侧字符
mid()取区间的数据
indexOf()获取索引
at()获取索引的位置
count()统计个数
startWith()是否为开始
endsWith()是否为结尾
contains()是否包含

字符的转换

toInt()字符串转整数
QString::number()整数转字符串
toFloat()字符串转浮点数
toUpper()转大写
toLower(0转小写

arg()函数的常见使用方法:

根据%x  x的取值范围为(1~99),根据编号来替换字符。

    QString s1="123";
    QString s2="456";
    QString s3="789";
    QString S=QString("%1 %2 %3").arg(s1).arg(s2).arg(s3);//用s1替换%1,用s2替换%2,用s3替换%3
    qDebug()<<S;

注意  :

.arg(s1).arg(s2).arg(s3)    %的编号从小到大取

    QString s1="123";
    QString s2="456";
    QString s3="789";
    QString S=QString("%5 %1 %6").arg(s1).arg(s2).arg(s3);//用s1替换%1,用s2替换%2,用s3替换%3
    qDebug()<<S;

 arg的重载:

arg(qlonglonga,int fieldWidth= 0,intbase= 10,QCharfillChar= QLatin1Char(' '))

  • a代表数据
  • fieldWidth指定填充用字符填充字符填充的最小空间量。正值生成右对齐的文本;负值将生成左对齐的文本。
  • base 是进制数

1.进制的转换

    int s1=123;
    int s2=456;
    int s3=789;

    QString S=QString("%1 %2 %3").arg(s1).arg(s2).arg(s3);
    QString S1=QString("%1 %2 %3").arg(s1,0,8).arg(s2,0,2).arg(s3,0,16);
    //用s1替换%1使用8进制,用s2替换%2使用2进制,用s3替换%3使用16进制
    qDebug()<<S;
    qDebug()<<S1;

2.对齐的方式

  • 正数代表右对齐
  • 负数代表左对齐
    QString S=QString("%1 %L2 %L3").arg(s1).arg(s2).arg(s3);
    QString S1=QString("%1").arg(s1,-5);//左对齐
    QString S2=QString("%1").arg(s2,5);//右对齐
    QString S3=QString("%1").arg(s3,10);//右对齐
    qDebug()<<S;
    qDebug()<<S1;
    qDebug()<<S2;
    qDebug()<<S3;

 

double类型可以根据指定的格式和精度设置格式 

 arg(doublea,int fieldWidth= 0,charformat= 'g',intprecision= -1,QCharfillChar= QLatin1Char(' '))

  • a代表数据
  • fieldWidth代表对齐方式 
  • format 类型
  • precision 精度(小数点后的位数)

format的格式有:

    double b1=12.222;
    double b2=13.333;
    double b3=14.444;
    QString  s=QString("%1 %2 %3").arg(b1,0,'E',3).arg(b2,0,'g',3).arg(b3,0,'f',3);
    qDebug()<<s;

 

 QByteArrary(字节数组)

和QString类似,但QBytearray没有arg(),QByteArrary总会保证以'\0'结尾

QVariant(共用体) (union)

一个QVariant对象一个时间只会保存单一类型的单一值。

可以使用toT(T为数据类型)进行转换。

  • canConvert() 可以判断一个类型是否可以转换为一个特殊类型
  • convent()  判断一个类型是否可以转换为不同类型

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值