Qt中QVector与QList的应用
发布日期:2021-08-28 20:23:50 浏览次数:35 分类:技术文章

本文共 2103 字,大约阅读时间需要 7 分钟。

首先來看看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;

posted on
2014-03-19 11:25 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/CD-lulu/p/3610943.html

转载地址:https://blog.csdn.net/weixin_33970449/article/details/94454191 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Linux入门
下一篇:Java精选笔记_Tomcat开发Web站点

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年03月26日 07时03分11秒