您的位置:首页 > 编程语言 > Qt开发

Qt-连续容器及迭代器

2012-12-29 02:19 399 查看
一、连续容器

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: