QList 列表指针的 释放

1,使用qDeleteAll()

QList<T*> list;

qDeleteAll(list);

list = NULL;

QList<T*> *listp;

qDeleteAll(*list);

listp->clear();

listp = NULL;

2.通过遍历列表对列表一个一个的释放。

在释放指针的同时把值清空,赋值为BULL 避免野指针。

QList<T *> *qList = new QList<T *>  动态分配内存空间 不使用时需要释放

T *t = new T;

qList->append(t);

QList<t*>::iterator item = qList->begin();

            while(item != qList->end())
            {
                qList->removeOne(*item);
                T *index = (T*)*item;
                delete index;
                index = NULL;
                item++;
                qDebug()<< "dhsahdlhlas lish" << qList->length();
            }
            qList->clear();
            qList = NULL;

/****************************************************************

1、QList是一种表示链表的模板类。

2、QList是Qt的一种泛型容器类。它以链表方式存储一组值,并能对这组数据进行快速索引,还提供了快速插入和删除等操作。

3、QList、QLinkedList和QVector提供的操作极其相似:
* 对大多数操作来说,我们用QList就可以了。其API是基于索引(index)的,因此用起来比QLinkedList更方便(QLinkedList的API是基于迭代器的)。QList比QVector更快,这是由它们在内存中的存储方式决定的。
* 需要使用QLinkedList的地方:
* 需要使用QVector的地方:元素的储存位置彼此相邻。

4、QList表示为一组指向被存储元素的数组。(例外,如果T本身就是指针类型,或者是size不大于指针类型的基本类型,或者是Qt的共享类,那么QList会直接在指针数组中存储这些元素 。)元素个数小于1000的QList能够很快地实现在链表中间插入操作,以及快速的查找操作。此
外,由于QList在链表两端都预先分配了内存,因此实现prepend()和append()操作都很快。
注意:对于size比指针大的共享类,使用QVector会更好。

5、以下是两个分别存储int型数据和QDate类型数据的链表:
QList intList;
QList dateList;

6、QList以链表形式存储一组元素。默认为空链表,我们可以使用<<操作符添加元素:
QList list;
list << “one” << “two” << “three”; // list: [“one”, “two”, “three”]

7、QList提供了一系列添加、移动、删除元素的操作:insert(), replace(), removeAt(), swap()。此外,它还提供了便于操作的函数:append(), prepend(), removeFirst(), removeLast()。

8、QList与C++中数组的索引方式一样,都是从0开始的。我们可以使用[]操作符来访问位于索引值
处的元素。对于非const链表,操作符[]返回的是该元素的引用,并且返回值可以用途左操作数。
if ( list[0] == “Bob” )
list[0] = “Robert”;
由于QList是以指针数组的形式实现的,该操作能够很快地实现(时间复杂度为常数)。对于只读访问,我们可以用at()函数实现访问:
for ( int i=0; i!=list.size(); ++i )
{
if ( list.at(i) == “Jane” )
{ cout << “Found Jane at position:” << i<< endl;}
}
at()操作比操作符[]更快,因为它不需要深度复制(deep copy)。

9、QList的一个常用操作是,从链表中取出一个元素(元素不再在链表之中),并对该元素进行操作。QList提供了以下操作来实现此功能:
takeAt()、takeFirst()、takeLast()。以下是一个示例:
QList
/*****************************************************************

QList使用总结
概述
一、QList 声明及初始化
1. 声明 QList
2. 初始化 QList
二、QList 基本的 增加、删除、移动、修改
1. 增加节点
2. 删除节点
3. 移动节点
4. 修改节点值
三、QList 定位节点
四、QList 的基本信息
五、QList 迭代器功能
概述
QList是Qt的泛型容器类之一。它将项目存储在一个列表中,该列表提供基于索引的快速访问以及基于索引的插入和删除。
QList、QLinkedList 和 QVector 提供了类似的 API 和功能。它们通常是可互换的,但性能有所区别。

QVector 应该是默认首选的容器
QList是最广泛用于Qt API中传递值的容器
QList不是指针结构体类型的链表,真正的结构体指针链表是 QLinkedList
一、QList 声明及初始化
QList可以保存基本数据类型的,如int,double,bool等;但是在存储QObject对象及其子类对象时,不能直接存对象本身,而是只能存对象的地址;

1. 声明 QList
声明简单:

//基本数据类型
QList<int> integerList;
QList<QDate> dateList;

//存储QObject对象的地址
QList <QWidget *> ptr_widgets;
QList <QObject *> ptr_objects;

2. 初始化 QList
初始化也很简单;若没初始化,链表默认为空的。

QList<QString> list = { "one", "two", "three" };

QWidget * widget1 = new QWidget();
QWidget * widget2 = new QWidget();
QList<QWidget *> ptr_widgets = {widget1, widget2};

二、QList 基本的 增加、删除、移动、修改
QList 在有些实现都是需要多个基本操作组合来实现的,不同的实现用的方法也不一致,Qt提供的都是最核心、最单一的功能。

1. 增加节点
insert():插入节点到
append():尾部添加节点
prepend() :头部添加节点
operator <<():尾部添加节点或链表
operator+=():尾部添加节点
2. 删除节点
removeAt():删除节点
removeFirst():删除头节点
removeLast():删除尾节点
3. 移动节点
move():链表内移动节点位置
swap():俩个链表交换值(其实交换一下地址映射就能实现)
4. 修改节点值
replace():替换链表内的节点值
三、QList 定位节点
QList是有序的链表,可以通过索引来得到

operator [ ] 数组索引符:这个和普通数组一样的使用 [ ] 访问下标方法一致
at() 函数:也是通过索引值,也即是下标方式
Qt 推荐使用at()函数,这样的效率更好,因为 at()函数不会发生 深拷贝 ,而另外一种方式会。

QList还提供了一些快捷的 索引 + 返回索引节点 + 删除原索引节点,也就是组合的功能;但是这个是 take…不是get…这样的,这就意味着,这个其实是✂剪掉一个节点,并返回

takeAt():取得在指定位置的节点
takeFirst():取得头节点 ;等价【takeAt(0)】
takeLast():取得尾节点
四、QList 的基本信息
contains():是否包含节点xxx
count():对指定节点值计数
isEmpty():链表为空?
size():链表大小?
indexOf():节点位置?

Qt中QList用法详解相关推荐

  1. Qt QPushButton按钮用法详解

    Qt QPushButton按钮用法详解 按钮是 GUI 开发中最常用到的一种控件,作为一款著名的 GUI 开发框架,Qt 提供了很多种按钮,比如 QPushButton(普通按钮).QRadioBu ...

  2. pdo mysql limit_PHP mysql中limit用法详解(代码示例)

    在MySQL中,LIMIT子句与SELECT语句一起使用,以限制结果集中的行数.LIMIT子句接受一个或两个offset和count的参数.这两个参数的值都可以是零或正整数. offset:用于指定要 ...

  3. php 配置 error_reporting,PHP中error_reporting()用法详解 技术分享

    在php中error_reporting函数有什么作用? error_reporting([ int $level ] ) - 设置应该报告何种 PHP 错误. 该函数能够在运行时设置 error_r ...

  4. mysql increment_mysql中auto_increment用法详解

    在mysql中AUTO_INCREMENT类型的属性用于为一个表中记录自动生成ID功能,也就是会自动自增一个ID了,如现在是1下次会自动是2了,就这么简单,下面来看mysql中auto_increme ...

  5. 【 Python 中 int 用法详解】(转载)

    Python 中 int 用法详解 欢迎转载,转载请注明出处! 文章目录 Python 中 int 用法详解 0. 参考资料 1. int 的无参数调用 2. int 接收数字作为参数 3. int ...

  6. Python 中 int 用法详解

    Python 中 int 用法详解 欢迎转载,转载请注明出处! 文章目录 Python 中 int 用法详解 0. 参考资料 1. int 的无参数调用 2. int 接收数字作为参数 3. int ...

  7. Python中self用法详解

    Python中self用法详解 https://blog.csdn.net/CLHugh/article/details/75000104 首页 博客 学院 下载 图文课 论坛 APP 问答 商城 V ...

  8. c 语言中set的用法,C++中set用法详解

    1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构 ...

  9. sql语句中exists用法详解

    文章目录 一.语法说明 exists: not exists: 二.常用示例说明 1.查询a表在b表中存在数据 2.查询a表在b表中不存在数据 3.查询时间最新记录 4.exists替代distinc ...

最新文章

  1. 使用redis时遇到的问题
  2. MySQL命令行下执行.sql脚本详解
  3. android 成长日记 8.Fragment学习之方法回调
  4. archlinux yaourt安装 以及出错细节 database file for archlinuxfr does not exist.
  5. k6前级效果器怎么用_新手学习电吉他,效果器应选择单块还是综合?
  6. mysql sql高级应用程序_mysql-sql高级应用
  7. python爬虫案例——csdn数据采集
  8. Mac Automator小教程,简单易懂
  9. 多网卡配置同一网段IP情况解析
  10. C#|GMap.NET控件基本使用-高德地图
  11. 计算机ppt试题训练,教案计算机试题.ppt
  12. 【springmvc】SpringMVC启动流程及源码分析
  13. 七上八下猜数字_《脑筋急转弯》
  14. 服务器运行几年后搬迁,服务器搬迁之后的准备工作和应对
  15. 大话西游手游服务器地址修改,大话西游手游怎么转区?大话西游手游转区移民条件一览...
  16. orign绘制双排Stack Column
  17. DoT/DoH/DoQ 之 CoreDNS配置
  18. 合格前端系列第十弹-揭秘组件库一二事
  19. gap,margin和padding的区别
  20. Metrics 使用

热门文章

  1. 在灰度图像上进行Mean Shift迭代搜索目标 ,一维加权直方图 + 巴氏系数 + Mean Shift迭代
  2. 【更新于12.29】深度学习论文汇总
  3. ida的一些工具下载
  4. GEE实现图像随机森林分类
  5. OpenWrt路由器macvlan单线多拨的方法
  6. 【技术分享】新核心业务系统数据架构规划与数据治理
  7. pe下bootice修复Linux引导,pe下修复引导不成功?这种方法才是最有效的解决方法...
  8. Verilog专题(二十四)Lemmings3
  9. jquery点击图片放大效果
  10. 利用七牛云如何上传图片制作外链?