首先來看看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. 1.QT中的容器QVector,QList,QSet,QMap,QQueue,QStack,QMultiMap,QSingleList等

    1  新建一个项目 在pro文件中只需要加上CONFIG += C++11 main.cpp #include <QMap> int main() { QMap<int,QStrin ...

  2. PyQt(Python+Qt)学习随笔:Qt中的部分类型QString、QList和指针、引用在PyQt中的实现方式

    老猿Python博文目录 老猿Python博客地址 在我们查阅Qt的文档资料时,可以看到Qt中的链表使用的是QList,字符串使用的是QString,但老猿在测试时发现这两个类型PyQt不支持,无法找 ...

  3. Qt中的通用模板算法QtAlgorithms(qDeleteAll,qBinaryFind,qCountLeadingZeroBits,qPopulationCount,qFill,qSwap,qSort)

    Qt在<QtAlgorithms>头文件中为我们提供了一系列的全局模板方法,这些模板方法主要用于容器操作,比如qDeleteAll().其在Qt中的声明如下: void qDeleteAl ...

  4. Qt中的常用容器类(解释比较全面,有插图)

    在Qt库中为我们提供了一系列的基于模板的容器类.这些类可以被用来存储特定类型的项.例如,如果你需要一个大小可以变得QString数组,那么可以使用QVector<QString>. 这些容 ...

  5. Qt中使用ActiveX(3篇)

    由于最近需要使用ActiveX,一般来说可以使用微软提供的MFC或者ATL框架来开发,由于我个人对这部分内容不是很熟悉,好在Qt也提供对于ActiveX的支持.本文主要记录个人学习ActiveX的一些 ...

  6. C++中的stack类、QT中的QStack类

    C++中的stack 实现一种先进后出的数据结构,是一个模板类. 头文件 #include<stack> 用法(以int型为例): stack <int> s; //定义一个i ...

  7. C++中的queue类、QT中的QQueue类

    C++中的queue 实现一种先进先出的数据结构,是一个模板类 头文件 #include<queue> 用法(以int型为例): queue<int> Q; //定义一个int ...

  8. Qt 中一些常用类中文说明

    Qt 中一些常用类中文说明是本文讲述的内容,这篇文章主要是介绍Qt 当中经常使用的类,采取的是使用字母索引的方式,下面的类是被经常使用的. QDataStream 为QIODevice提供了一串的二进 ...

  9. Qt中常用知识点

    1:QRegExp 正则表达式 QRegExp regExp("[a-zA-Z][1-9][0-9]{0,2}"); xxx->setValidator(new QRegEx ...

随机推荐

  1. P3388 【模板】割点(割顶)

    P3388 [模板]割点(割顶) 题目背景 割点 题目描述 给出一个n个点,m条边的无向图,求图的割点. 输入输出格式 输入格式: 第一行输入n,m 下面m行每行输入x,y表示x到y有一条边 输出格式 ...

  2. LA 7048 Coprime 莫比乌斯反演

    题意: 给出\(n(n \leq 10^5)\)个数字\(a_i(a_i \leq 10^5)\),从中选出\(3\)个数,使得这\(3\)个数两两互质或者两两不互质 分析: 可以说这是<训练指 ...

  3. python基础学习笔记——反射

    对编程语言比较熟悉的朋友,应该知道“反射”这个机制.Python作为一门动态语言,当然不会缺少这一重要功能.然而,在网络上却很少见到有详细或者深刻的剖析论文.下面结合一个web路由的实例来阐述pyth ...

  4. python基础学习笔记——单继承

    1.为什么要有类的继承性?(继承性的好处)继承性的好处:①减少了代码的冗余,提供了代码的复用性②提高了程序的扩展性 ③(类与类之间产生了联系)为多态的使用提供了前提2.类继承性的格式:单继承和多继承# ...

  5. php msql 表单

    http://www.cnblogs.com/webers/p/3849707.html

  6. Ubuntu简单指令和热键的学习

    Ubuntu查看本机版本的方法 sudo lsb_release -a即可 注销linux: 输入:exit 注意,离开系统不是关机,基本上,linux本身已经有相当多的工作进行,所以你离开时,这次这 ...

  7. 微信小程序的那些坑

    早闻微信小程序是个坑,结果名不虚传,细数一下我开发小程序遇过到坑. 1.UI组件过度封装. 微信小程序的组件是模仿react.js或vue.js的web组件设计的,并且封装了weui.css样式. P ...

  8. 再谈H2的MVStore与MVMap

    对H2的[MVStore]: http://www.cnblogs.com/simoncook/p/5188105.html 这篇文章的补充. 概述 我们通常用的map,比如HashMap Linke ...

  9. Selenium WebDriver- actionchians模拟鼠标悬停操作

    #encoding=utf-8 import unittest import time from selenium import webdriver from selenium.webdriver i ...

  10. Redhat7配置yum源(本地源和网络源)

    Redhat7配置yum源(本地源和网络源)   目录 一:配置本地yum源 二:配置网络yum源 YUM(Yellow dog Updater Modified): yum是基于RPM包构建的软件更 ...