4.2 连续容器


***【在线视频教程】***

好文章,来自【福优学苑@音视频+流媒体】

4.2 连续容器

五种:QVector,QList,QStack,QQueue,QString

数组、链表、栈、队列、字符串

QVector<T>  

它是QT里最常见的容器类,它对应STL中的Vector<T>容器,是动态数组,提供快速的索引存取。


QList<T>  QLinkList<T>  QVarLengthArray<T>提供类似的功能。

可以参考帮助文档,查看QList的具体使用方法,以下列出部分使用示例:



1.创建各种类型的vector:

  QVector<int> integerVector;

  QVector<QString> stringVector;


2.创建一定数目项的vector

  QVector<QString> vector(200);



3.带初始化的创建vector

  QVector<QString> vector(200, "apple");


也可以使用fill赋值:

  QVector<QString> vector(3);

  vector.fill("Yes");

  // vector: ["Yes", "Yes", "Yes"]



  vector.fill("oh", 5);

  // vector: ["oh", "oh", "oh", "oh", "oh"]



4.QVector像c++的Vector一样提供[]下标操作,并从0项开始。还提供at()的只读操作,at()比[]更快,因为它不会导致深度复制。


  if (vector[0] == "apple")

  vector[0] = "banana";


  for (int i = 0; i < vector.size(); ++i) {

    if (vector.at(i) == "apple")

        cout << "Found [apple] at position " << i << endl;


  }


5.你可以使用indexOf,lastIndexOf来查询获取某项值的索引:


  QVector<QString> vector;

  vector << "A" << "B" << "C" << "B" << "A";

  vector.indexOf("B");            // returns 1

  vector.lastIndexOf("X");        // returns -1


也可以用contains()查看是否包含某元素,返回bool值。


6.通过append,operator<<,prepend,insert添加元素。

(对于较大的vector来说,在开头和中间插入项都是相当耗时的。这种情况更适合使用QLinkedList<T>)


  QVector<QString> vector(0);


  vector.append("one");

  vector.append("two");

  vector.append("three");

  // vector: ["one", "two", "three"]


  QVector<QString> vector(0);

  vector << “one” << “two” << “three”;

  // vector: ["one", "two", "three"]


  QVector<QString> vector;

  vector.prepend("one");

  vector.prepend("two");

  vector.prepend("three");

  // vector: ["three", "two", "one"]


  QVector<QString> vector;

  vector << "alpha" << "beta" << "delta";


  vector.insert(2, "gamma");

  // vector: ["alpha", "beta", "gamma", "delta"]


7.size() resize() isEmpty() capacity()等和容器大小相关操作。


8.相关转化:toList(),toStdVector()  

  QVector<double> vect;

  vect << "red" << "green" << "blue" << "black"; 


  QList<double> list = vect.toList();

  // list: ["red", "green", "blue", "black"]


QLinkedList<T>


前面提到,它适合随机插入项,其原因是它的链式结构。

提供了常量时间的插入删除,却不能提供快速的随机存取操作。

不提供[]操作,它的遍历元素是通过迭代器完成的。


QList<T>


数组列表,结合了上面两种结构的优点,它支持随机存取,在它的任意一端插入和删除都是非常快速的并且对于千项以上的列表,在中间插入和删除也是很快的。学过数据结构的都会清楚这三者的结构区别。如果非要每个项元素都相邻那就只能用QVector。


QString<t>

它是QList<QString>的子类,它为字符串操作提供了更通用的操作。


QStack<T> 

栈的实现,QStack提供pop() push() swap() top()操作,它继承自QVector<T>


QQueue<T>

提供dequeue() enqueue() head() swap操作。继承自QList<T>。


好文章,来自【福优学苑@音视频+流媒体】
***【在线视频教程】***