Qt容器的笔记

Qt的容器类

Qt的容器类是隐式共享的,它们优化了速度、低内存消耗和最小的内联代码扩展,所以就有了更小的可执行文件。

它们在做只读容器的情况下他们是线程安全的。

遍历容器中的项,有两种迭代器可以选择:

  1. JAVA风格迭代器
  2. STL风格迭代器

Qt还提供了一个foreach关键字,可以非常容易遍历顺序容器中的项。

容器类(Container Class)

Qt提供的顺序容器: QList ,QLinkedList ,QVector ,QStack 和 QQueue 。

关联性容器: QMap ,QMultiMap , QHash , QMultiHash 和 QSet。

Container Class描述
QList<T>(常用),QList使用数组实现,它可以通过索引访问的给定类型(T)的值
QLinedList<T>类似QList,它使用迭代器而QList使用整数索引来访问项。中间插入值时,它比QList有着更好的性能。(只要QLinkedList中的项存在,指向该项的迭代器就仍然有效,而指向QList的迭代器在任何插入或删除之后都可能无效。)
QVector<T>它将给定类型的值存储在内存中的相邻位置。在前面或中间插入可能非常缓慢,因为它可能导致大量的项必须在内存中移动一个位置。
QStack<T>这是QVector的一个方便的子类,它提供了“后进先出”(LIFO)语义。
QQueue<T>这是QList的一个方便的子类,它提供了“先入先出”(FIFO)语义。
QSet<T>这提供了一个具有快速查找功能的集合
QMap<Key,T>这提供了一个字典(关联数组),它将类型为Key的键映射到类型为T的值。以Key进行排序存储(升序)。
QMultiMap<Key,T>QMap的子类,它为多值映射提供了接口,即一个键可以与多个值相关联的映射。以Key进行排序存储(升序)。
QHash<Key,T>具有QMap几乎相同的API,但提供了显著更快的查找。QHash以任意顺序存储数据(随机存储)
QMultiHash<Key,T>这是QHash的一个方便的子类,它为多值散列提供了一个很好的接口。(随机存储)

迭代器

关于两者比较:java风格迭代器,它的性能没有STL迭代器好,但是书写方便。

容器JAVA只读JAVA可读可写STL只读STL可读可写
QList<T> ,QQueue<T>QListIterator<T>QMutableListIterator<T>QList<T>::const_iteratorQList<T>::iterator
QLinkedList<T>QLinkedListIterator<T>QMutableLinkedListIterator<T>QLinkedList<T>::const_iteratorQLinkedList<T>::iterator
QVector<T> ,QStack<T>QVectorIterator<T>QMutableVectorIterator<T>QVector<T>::const_iteratorQVector<T>::iterator
QSet<T>QSetIterator<T>QMutableSetIterator<T>QSet<T>::const_iteratorQSet<T>::iterator
QMap<Key,T> ,QMultiMap<Key,T>QMapIterator<Key,T>QMutableMapIterator<Key,T>QMap<Key,T>::const_iteratorQMap<Key,T>::iterator
QHash<Key,T> ,QMultiHash<Key,T>QHashIterator<Key,T>QMutableHashIterator<Key,T>QHash<Key,T>::const_iteratorQHash<Key,T>::iterator

QList 迭代器:

QList<int> list;
//JAVA风格
QListIterator<int> ite1(list);								//只读
QMutableListIterator<int> ite2(list);			 			 //可读可写

//JAVA风格迭代器使用
while(ite1.hasNext())
{
    qDebug() << ite1.next();
}

//STL风格
QList<int>::const_iterator constStlListIte = list.begin();	   //只读
QList<int>::iterator stlListIte = list.begin();				  //可读可写

//STL风格迭代器使用
for(;constStlListIte != list.end();constStlListIte++)
{
    qDebug() << *constStlListIte;
}

QLinkedList 迭代器:

QLinkedList <int> linkedList;
//JAVA风格
QLinkedListIterator<int> constJavaLinkIte(linkedList);                  //只读
QMutableLinkedListIterator<int> javaLinkIte(linkedList);                //可读可写
//STL风格
QLinkedList<int>::const_iterator constStlLinkIte = linkedList.begin();  //只读
QLinkedList<int>::iterator stlLinkIte = linkedList.begin();             //可读可写

… 它们的写法差不多一致,下面介绍以下QMap这些的写法

QMap 迭代器:

QMap<int,int> map;

//JAVA风格
QMapIterator<int,int> constJavaMapIte(map);
while(constJavaMapIte.hasNext())
{
   qDebug() << "key = " << constJavaMapIte.key() << " value = " << constJavaMapIte.next().value() << endl;
}
//STL风格
QMap<int,int>::const_iterator constStlMapIte = map.begin();
for(;constStlMapIte != map.end();constStlMapIte++)
{
   qDebug() << "key = " << constStlMapIte.key() << " value = " << constStlMapIte.value() << endl;
}

…QHash的写法与QMap的写法也差不多一致,接下来还有介绍最后一个 foreach 遍历

foreach 关键字可以用来遍历 顺序容器 不能遍历 关联性容器。

QList<int> list;

foreach(int value,list)
{
	qDebug() << value;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值