QList类、QLinkedList类和QVector类
来源:互联网 发布:洛瑞数据 编辑:程序博客网 时间:2024/06/05 04:42
这样的数据类型包含了通常使用的大多数数据类型,包括基本数据类型(如int和double等)和Qt的一些数据类型(如QString、QDate和QTime等)。不过,Qt的QObject及其他的子类(如QWidget和Qdialog等)是不能够存储在容器中的,例如:
QList<QToolBar> list;
上述代码是无法通过编译的,因为这些类(QObject及其他的子类)没有复制构造函数和赋值操作运算符。
一个可代替的方案是存储QObject及其子类的指针,例如:
QList<QToolBar*> list;
Qt的容器类是可以嵌套的,例如:
QHash<QString, QList<double> >
1.QList类对于不同的数据类型,QList<T>采取不同的存储策略,存储策略有以下几种。(1)如果T是一个指针类型或指针大小的基本类型(即该基本类型占有的字节数和指针类型占有的字节数相同),QList<T>会将数值直接存储在它的数组中。(2)如果QList<T>存储对象的指针,则该指针指向实际存储的对象。下面举一个例子: #include <QDebug>int main(int argc,char *argv[]){ QList<QString> list; //(a) { QString str("This is a test string"); list<<str; //(b) } //(c) qDebug()<<list[0]<< "How are you! "; return 0;}2.QLinkedList类QLinkedList<T>是一个链式列表,它以**非连续的内存块**保存数据。QLinkedList<T>**不能使用下标,只能使用迭代器访问它的数据项**。与QList相比,当对一个很大的列表进行插入操作时,QLinkedList具有更高的效率。3.QVector类QVector<T>在**相邻的内存中存储给定数据类型T的一组数值**。在一个QVector的前部或者中间位置进行插入操作的速度是很慢的,这是因为这样的操作将导致内存中的大量数据被移动,这是由QVector存储数据的方式决定的。![java风格迭代器遍历容器](http://img.blog.csdn.net/20160607162603316)(1)QList只读遍历方法。【例】(简单) 通过控制台程序实现QList只读遍历方法。其具体代码如下:#include <QDebug> //(a)int main(int argc,char *argv[]){ QList<int> list; //创建一个QList<int>栈对象list list<<1<<2<<3<<4<<5; //用操作运算符“<<”输入五个整数 QListIterator<int> i(list); //(b) for(;i.hasNext();) //(c) qDebug()<<i.next(); return 0;}最后程序的运行结果为:1 2 3 4 5
QListIterator::toBack():将迭代点移动到最后一个列表项的后面。
QListIterator::hasPrevious():检查当前迭代点之前是否具有列表项。
QListIterator::previous():返回前一个列表项的内容并将迭代点移动到前一个列表项之前。
toFront():移动迭代点到列表的前端(第一个列表项的前面)。
peekNext():返回下一个列表项,但不移动迭代点。
peekPrevious():返回前一个列表项,但不移动迭代点。
findNext():从当前迭代点开始向后查找指定的列表项,如果找到,则返回true,此时迭代点位于匹配列表项的后面;如果没有找到,则返回false,此时迭代点位于列表的后端(最后一个列表项的后面)。
findPrevious():与findNext()类似,不同的是它的方向是向前的,查找操作完成后的迭代点在匹配项的前面或整个列表的前端。
例】(简单) 使用STL风格迭代器。具体代码如下: #include <QDebug>int main(int argc,char *argv[]){ QList<int> list; //初始化一个空的QList<int>列表 for(int j=0;j<10;j++) list.insert(list.end(),j); //(a) QList<int>::iterator i; //初始化一个QList<int>::iterator读写迭代器 for(i=list.begin();i!=list.end();++i) //(b) { qDebug()<<(*i); *i=(*i)*10; } //初始化一个QList<int>:: const_iterator读写迭代器 QList<int>::const_iterator ci; //在控制台输出列表的所有值 for(ci=list.constBegin();ci!=list.constEnd();++ci) qDebug()<<*ci; return 0;}最后编译,运行此应用程序,输出结果如下: 0 1 2 3 4 5 6 7 8 90 10 20 30 40 50 60 70 80 90
0 0
- QList、QLinkedList、QVector类
- QList类、QLinkedList类和QVector类
- Qt中的容器类 QList QLinkedList QVector
- QVector、QList、QLinkedList 类 用法区别
- QT容器类(一) 之 QVector 、QLinkedList 和 QList
- QT容器类(一) 之 QVector 、QLinkedList 和 QList
- Qt中的容器类 QList QLinkedList QVector..遍历及相关
- QVector QList QLinkedList
- QList、QVector、QMap容器类
- 循环容器(QVector,QLinkedList,QList)
- [Qt] 循序容器(QVector、QLinkedList、QList...)
- Qt修炼手册8_常用的容器类QVector和QList
- Qt4 Gossip: 循序容器(QVector、QLinkedList、QList...) - 转
- Qt4 Gossip: 循序容器(QVector、QLinkedList、QList...) - 转
- Qt中丰富的容器类---数组QVector、链表QLinkedList、映射表QMap、哈希表QHash
- Qt之丰富的容器类---数组QVector、链表QLinkedList、映射表QMap、哈希表QHash
- QLinkedList 类用法
- QList类
- jquery为多个元素添加事件
- Html5 Checkbox多种状态切换
- poj 3253 Fence Repair
- Android事件分发机制完全解析(终极版二)
- 三栏网页布局
- QList类、QLinkedList类和QVector类
- opencv中的Kmeans使用示例
- Example 2 : Multi Sampling And Filtering Methods
- 设计模式笔记-Interpreter解释器模式
- 算法排序之冒泡排序与插入排序
- HBuilder配置SVN
- H.264 Quantization
- PHP中is_file,file_exists的区别,is_file 不能替代file_exits的理由
- 第十五周项目2洗牌