Qt中QVector与QList的应用
首先來看看QVector 的基本使用方式,建立一個可容納兩個元素的QVector ,並使用索引方式存取元素值:
QVector<double> vect(2);
vect[0] = 1.0;
vect[1] = 2.0;
for (int i = 0; i < vect.count(); ++i) {
cout << vect[i] << endl;
}
for (int i = 0; i < vect.count(); ++i) {
cout << vect.at(i) << endl;
}
要使用索引方式設定元素,必須先配置好夠長的空間,否則會發生超出索引範圍的錯誤,使用[] 運算子指定索引存取的方式是比較方便,但在某些場合下,使用at() 方法會較有效率一些,這涉及Qt 的隱式共享機制,稍後再作介紹。
您也可以使用QVector 的append() 方法來加入元素,使用remove() 方法來移除元素,使用insert() 方法來插入元素,例如append() 的使用如下:
vect.append(3.0);
vect.append(4.0);
或者是使用<< 運算子附加元素:
vect << 5.0 << 6.0;
Qt4 Gossip: 循序容器(QVector、QLinkedList、QList...) - 转 收藏
QVector 、 QLinkedList 與QList 是Qt 所提供的幾個常用容器類別。QVector 將項目(item )儲存在鄰接的記憶體空間之中,提供基於索引 (index-based )存取方式的容器類別。QLinkedList 以鏈結(Linked )的方式儲存項目,提供基於迭代器(iterator- based )存取方式的容器類別。QList 提供基於索引的快速存取容器類別,內部使用指標陣列,可提供快速插入及移除項目。
首先來看看QVector 的基本使用方式,建立一個可容納兩個元素的QVector ,並使用索引方式存取元素值:
QVector<double> vect(2);
vect[0] = 1.0;
vect[1] = 2.0;
for (int i = 0; i < vect.count(); ++i) {
cout << vect[i] << endl;
}
for (int i = 0; i < vect.count(); ++i) {
cout << vect.at(i) << endl;
}
要使用索引方式設定元素,必須先配置好夠長的空間,否則會發生超出索引範圍的錯誤,使用[] 運算子指定索引存取的方式是比較方便,但在某些場合下,使用at() 方法會較有效率一些,這涉及Qt 的隱式共享機制,稍後再作介紹。
您也可以使用QVector 的append() 方法來加入元素,使用remove() 方法來移除元素,使用insert() 方法來插入元素,例如append() 的使用如下:
vect.append(3.0);
vect.append(4.0);
或者是使用<< 運算子附加元素:
vect << 5.0 << 6.0;
QVector 也重載了一些其它的運算子,以及提供了一些其它可用的方法,請查詢Qt 線上文件有關於QVector 的介紹。QVector 提供的是鄰接的 記憶體空間以存取物件,所以對於循序存取或使用索引,效率較高,但如果要插入或移除元素時,效率就會低落。QVector 的子類別QStack 提供了 push() 、pop() 與top() 等方法,方便您進行堆疊結構的物件管理。
對於需要經常要在容器中插入或移除元件,您可以使用QLinkedList 以提高存取效率,它不提供基於索引的存取方式,而是基於迭代器的存取方式,稍後會介紹迭代器的使用,以下先來看看QList 。
Qlist
QList 提供的是基於索引的存取方式,其內部實作使用了指標陣列,陣列中每個指標指向所要儲存的元素,結合了QVector 與QLinkedList 的 優點,提供快速存取與插入、移除,其索引存取方式或可用的方法與QVector 是類似的,也可以使用<< 運算子來附加元素,例如:
QList<QString> list;
list << "caterpillar" << "momor" << "bush";
for(int i = 0; i < list.size(); ++i) {
cout << list[i].toAscii().data() << endl;
}
cout << endl;
for(int i = 0; i < list.size(); ++i) {
cout << list.at(i).toAscii().data() << endl;
}
cout << endl;
Qt中QVector与QList的应用的更多相关文章
- 1.QT中的容器QVector,QList,QSet,QMap,QQueue,QStack,QMultiMap,QSingleList等
1 新建一个项目 在pro文件中只需要加上CONFIG += C++11 main.cpp #include <QMap> int main() { QMap<int,QStrin ...
- PyQt(Python+Qt)学习随笔:Qt中的部分类型QString、QList和指针、引用在PyQt中的实现方式
老猿Python博文目录 老猿Python博客地址 在我们查阅Qt的文档资料时,可以看到Qt中的链表使用的是QList,字符串使用的是QString,但老猿在测试时发现这两个类型PyQt不支持,无法找 ...
- Qt中的通用模板算法QtAlgorithms(qDeleteAll,qBinaryFind,qCountLeadingZeroBits,qPopulationCount,qFill,qSwap,qSort)
Qt在<QtAlgorithms>头文件中为我们提供了一系列的全局模板方法,这些模板方法主要用于容器操作,比如qDeleteAll().其在Qt中的声明如下: void qDeleteAl ...
- Qt中的常用容器类(解释比较全面,有插图)
在Qt库中为我们提供了一系列的基于模板的容器类.这些类可以被用来存储特定类型的项.例如,如果你需要一个大小可以变得QString数组,那么可以使用QVector<QString>. 这些容 ...
- Qt中使用ActiveX(3篇)
由于最近需要使用ActiveX,一般来说可以使用微软提供的MFC或者ATL框架来开发,由于我个人对这部分内容不是很熟悉,好在Qt也提供对于ActiveX的支持.本文主要记录个人学习ActiveX的一些 ...
- C++中的stack类、QT中的QStack类
C++中的stack 实现一种先进后出的数据结构,是一个模板类. 头文件 #include<stack> 用法(以int型为例): stack <int> s; //定义一个i ...
- C++中的queue类、QT中的QQueue类
C++中的queue 实现一种先进先出的数据结构,是一个模板类 头文件 #include<queue> 用法(以int型为例): queue<int> Q; //定义一个int ...
- Qt 中一些常用类中文说明
Qt 中一些常用类中文说明是本文讲述的内容,这篇文章主要是介绍Qt 当中经常使用的类,采取的是使用字母索引的方式,下面的类是被经常使用的. QDataStream 为QIODevice提供了一串的二进 ...
- Qt中常用知识点
1:QRegExp 正则表达式 QRegExp regExp("[a-zA-Z][1-9][0-9]{0,2}"); xxx->setValidator(new QRegEx ...
随机推荐
- CodeForces 519E 树形DP A and B and Lecture Rooms
给出一棵树,有若干次询问,每次询问距两个点u, v距离相等的点的个数. 情况还挺多的,少侠不妨去看官方题解.^_^ #include <iostream> #include <cst ...
- Objective-C中的一些特殊的数据类型
nil nil和C语言的NULL相同,在objc/objc.h中定义.nil表示一个Objctive-C对象,这个对象的指针指向空(没有东西就是空). Nil 首字母大写的Nil和nil有一点不一样 ...
- oracle 控制文件的重建
目录 oracle 控制文件的重建 NORESETLOGS RESETLOGS oracle 控制文件的重建 不到最后时刻,如三个控制文件都已损坏,又没有控制文件的备份.还是不要重建控制文件,处理不好 ...
- Flowerpot(单调队列)
描述 Farmer John has been having trouble making his plants grow, and needs your help to water them pro ...
- gcd-模板+最小公倍数
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; int G ...
- NOJ——1669xor的难题(详细的树状数组扩展—异或求和)
[1669] xor的难题 时间限制: 1000 ms 内存限制: 65535 K 问题描述 最近Alex学长有个问题被困扰了很久,就是有同学给他n个数,然后给你m个查询,然后每个查询给你l和r(左下 ...
- ACM程序设计选修课——1036: Hungar的菜鸟赛季(YY)
1036: Hungar的菜鸟赛季 Time Limit: 1 Sec Memory Limit: 64 MB Submit: 20 Solved: 14 [Submit][Status][Web ...
- BZOJ 4821 [Sdoi2017]相关分析 ——线段树
打开题面,看到许多$\sum$ woc,好神啊,SDOI好强啊 然后展开之后,woc,SDOI好弱啊,怎么T3出个线段树裸题啊. 最后写代码的时候,woc,SDOI怎么出个这么码农的题啊,怎么调啊. ...
- BZOJ3930 [CQOI2015]选数 【容斥】
题目 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公约数,以便进一步研 ...
- mybatis学习(九)——动态sql
MyBatis 的强大特性之一便是它的动态 SQL.可以根据不同条件拼接 SQL 语句. 动态 SQL 元素和使用 JSTL 或其他类似基于 XML 的文本处理器相似.主要由以下几种元素. if wh ...