QT容器详解(一)——QList

本文详细介绍了QList容器在C++中如何根据元素类型选择存储方式,包括数组形式和堆内存,以及其基本操作如添加、查询、删除和常用功能。重点展示了插入、查找、修改和删除数据的方法,以及迭代器的使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:QList

1.介绍

QList两种存储方式:

1)元素占用空间<指针占用空间(sizeof(T)<sizeof(void*)),并且元素已经使用Q_DECLARE_TYPEINFO声明为 Q_MOVABLE_TYPE 或 Q_PRIMITIVE_TYPE 时,QList以数组形式存储,QVector、QVarLengthArray一样;

2)元素占用空间>指针占用空间时,QList会将每个元素new到堆上,即 QList<T> 表示为 QList<T*> 的数组;

QList 容器在其生命周期内只会变大不会缩小,只有分配给另一个 QList 时析构函数和赋值运算符才会释放多余的空间。

2.基本操作

1> QList添加数据

/********添加数据**********/
QList<QString> list;

//支持<<直接添加数据
list << "11" << "22";//11,22

//insert任意位置插入数据
list.insert(1, "33");//11,33,22
list.insert(list.end(), "44");//11,33,22,44

//append尾部添加数据
list.append("55");//11,33,22,44,55

//prepend头部添加数据
list.prepend("66");//66,11,33,22,44,55

//索引赋值,赋值操作不能超出索引范围
list[0] = "00";

2> QList查询数据

/********查询数据**********/

//支持索引访问
QString str = list[0];//66
for (int i = 0; i < list.size(); i++)
{
    qDebug() << list[i];
}

//读写迭代器
QList<QString>::iterator it = list.begin();
for (; it < list.end(); it++)
{
    qDebug() << *it;
}

//只读迭代器
QList<QString>::ConstIterator conit = list.begin();
for (; conit < list.end(); conit++)
{
    qDebug() << *conit;
}

//QListIterator
QListIterator<QString> iterQ(list);
while (iterQ.hasNext())
{
    qDebug() << iterQ.next();//正向遍历
}
while (iterQ.hasPrevious())
{
    qDebug() << iterQ.previous();//反向遍历
}

//QMutableListIterator可变迭代器
QMutableListIterator<QString> iterM(list);
while (iterM.hasNext())
{
    if (iterM.next() == "55")
    {
        //操作list
    }
}
iterM.toFront();//返回操作list后头部
while (iterM.hasNext())
{
    qDebug() << iterM.next();
}

//只读访问优先使用at读取数据,相较于[]操作符速度更快,不用进行深拷贝
str = list.at(0);

3> QList删除数据

//仅删除
list.removeAt(0);
list.removeFirst();
list.removeLast();
list.removeAll("00");

//删除并返回
list.takeAt(1);
list.takeFirst();
list.takeLast();

4> QList常用

list.indexOf("11", 0);//从索引0开始,返回11的索引
list.contains("11");//是否包含11
list.replace(0, "qq");//替换
list.swap(1, 2);//交换

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值