Qt-连续容器及迭代器
2012-12-29 02:19
399 查看
一、连续容器
1.连续容器->向量QVector<T>
向量连续容器是把项存储到内存中相邻的位置的数据结构。
与C++数组的区别在于,向量连续容器知道自己的大小并且可以被重新定义大小。
在向量的末尾添加额外的项非常迅速,而在向量的中间插入项是比较费时的。
2.连续容器->链表QlinkedList<T>
把数据存储到内存中不相邻的位置的数据结构。
链表并未提供[]操作符。所以必须使用迭代器来遍历项。
迭代器还可以用来指定项的位置。
3.连续容器->列表QList<T>
QList是一个数组列表,结合了单一类中QVector<T>和QLinkedList<T>的最重要的有点。
支持随机访问,且基于索引。在QList<T>的任意一段插入或者删除项都是非常迅速的。
并且对含1000项以上的列表来说,在中间插入项也是很快的。
子类: QStringList----QList<QString>
QStack<T> 堆栈
QQueue<T> 队列
二、迭代器
1.JAVA类型迭代器:
只读迭代器:
读写迭代器
2.STL类型迭代器
STL风格的迭代器的语法是模仿C++数组的指针。我们可以使用++和--操作符来
移动下一项或者前一项。而使用*操作符来获取当前项。
注意:如果想使用STL风格的迭代器遍历某个函数的返回值,则必须复制此容器,
并且遍历这个副本。
这是因为每次调用QSplitter::sizes()都返回一个新的QList<int>值。
三、遍历容器
Qt还提供了最后一种在连续容器中遍历项的方式-foreach循环。break和continue声明是支持的。
1.连续容器->向量QVector<T>
向量连续容器是把项存储到内存中相邻的位置的数据结构。
与C++数组的区别在于,向量连续容器知道自己的大小并且可以被重新定义大小。
在向量的末尾添加额外的项非常迅速,而在向量的中间插入项是比较费时的。
eg.. QVector<double> vect(3); 赋值方式: 一.vect[0]=1.0;vect[1]=0.54;vect[2]=-0.146; 二.vect.append(1.0);vect.append(0.54);vect.append(-0.146); 三.vect<<1.0<<0.54<<-0.146; eg..遍历操作(使用count和[]操作符) double sum=0.0; for(int i = 0;i<vect.count();i++) sum+=vect[i];
2.连续容器->链表QlinkedList<T>
把数据存储到内存中不相邻的位置的数据结构。
链表并未提供[]操作符。所以必须使用迭代器来遍历项。
迭代器还可以用来指定项的位置。
eg.. QLinkedList<QString> list; list.append("Clash"); list.append("Ramons"); QLinkedList<QString>::iterator i = list.find("Ramons"); list.insert(i,"inserts");
3.连续容器->列表QList<T>
QList是一个数组列表,结合了单一类中QVector<T>和QLinkedList<T>的最重要的有点。
支持随机访问,且基于索引。在QList<T>的任意一段插入或者删除项都是非常迅速的。
并且对含1000项以上的列表来说,在中间插入项也是很快的。
子类: QStringList----QList<QString>
QStack<T> 堆栈
QQueue<T> 队列
二、迭代器
1.JAVA类型迭代器:
只读迭代器:
QVectorIterator<T> QLinkedListIterator<T> QListIterator<T>
读写迭代器
QMutableVectorIterator<T> ...
eg.. QList<double> list; ... QListIterator<double> i(list); while(i.hasNext()) dosomething(i.next());
2.STL类型迭代器
C<T>::iterator C<T>::const_iterator
STL风格的迭代器的语法是模仿C++数组的指针。我们可以使用++和--操作符来
移动下一项或者前一项。而使用*操作符来获取当前项。
eg.. QList<double> list; QList<double>::iterator i = list.begin(); while(i != list.end()) { *i=qAbs(*i); i++; }
注意:如果想使用STL风格的迭代器遍历某个函数的返回值,则必须复制此容器,
并且遍历这个副本。
eg..正确方式: QList<int> list = splitter->sizes(); QList<int>::const_iterator i = list.begin(); while(i != list.end()) { dosomething(*i); i++; } eg..错误方式: QList<int>::const_iterator i = splitter->sizes().begin(); while(i != splitter->sizes().end()) { ... }
这是因为每次调用QSplitter::sizes()都返回一个新的QList<int>值。
三、遍历容器
Qt还提供了最后一种在连续容器中遍历项的方式-foreach循环。break和continue声明是支持的。
QLinkedList<Movie> list; ... foreach(Movie mov,list) { if(mov.title() == "abc") ... break; }
相关文章推荐
- Qt容器类及其遍历(Java风格和STL风格迭代器)
- stl容器用反向迭代器连续删除元素的方法
- Qt的容器类之容器,迭代器
- C++ 容器类与Qt容器类对比 (2)连续容器类
- Qt 使用qDebug() 打印Qlist 容器数据
- STL容器迭代器失效问题讨论
- Java中容器的迭代器的fail-fast机制
- vector erase 重复删除容器内的指定内容时,使用迭代器(iterator)++的操作应该放到For循环内
- 关于容器内迭代器的“非自我更新”
- qt 的容器
- STL 容器和迭代器连载2_迭代器
- 飛飛(七十二)阅读 STL中的简单容器和迭代器
- c++ 里面的map容器的迭代器 first second
- C++标准库容器和迭代器讲解
- Qt 容器类
- Qt学习之路(35): Qt容器类之顺序存储容器
- 容器迭代器失效(转)
- STL的6大组件:容器、类属算法、迭代器、函数对象、适配器、分配器。
- Qt容器遍历
- 从零开始学C++之STL(三):迭代器类vector::iterator 和 vector::reverse_iterator 的实现、迭代器类型、常用的容器成员