QT容器学习

来源:互联网 发布:联发科x10优化 编辑:程序博客网 时间:2024/06/05 16:22
Qt容器类的分类:
A.连续容器:QVector,QLinkedList,QList

B.关联容器:QMap,QHash,键值对

A.连续容器

1、QVector

QVector是一种与数组相似的数据结构,它可以把项存储到内存中相邻近的位置。
与数组的区别在于:可以随时改变大小
优缺点:向向量的末尾添加新的元素是非常快速的,但是在向量的前面或者中间添加新元素是非常耗时的。

2、QLinkedList

QLinkedList:把项存储到内存中不相邻位置的数据结构。这是一种链表结构。
优缺点:不能提供快速随即访问,但是提供了常量时间的插入与删除。
访问时不支持索引访问,需要用到迭代器。

3、QList

QList:数组列表,结合了QVector和QLinkedList的最重要优点,支持快速随机访问,访问时是基于索引的。并且对含有1000项以上的列表来说,在中间插入也是很快的。其API是基于索引(index)的,因此用起来比QLinkedList更方便(QLinkedList的API是基于迭代器的)。QList比QVector更快,这是由它们在内存中的存储方式决定的。
1)声明
QList <float> floatList;
2)插入
a、<<方式:
floatList<<23.324;
floatList<<23432.123<<3213.124<<2.22<2323.2;
b、append()方式:
floatList.append(324.23);
c、insert();
  eg:
  QList<QString> list;
  list << "alpha" << "beta" << "delta";
  list.insert(2, "gamma");
  // list: ["alpha", "beta", "gamma", "delta"]
d、prepend();在最前面插入一个
3)修改
a、replace();
b、floatList[i]=234.3;
c、swap(int i,int j);;交换
   QList<QString> list;
   list << "A" << "B" << "C" << "D" << "E" << "F";
   list.swap(1, 4);
   // list: ["A", "E", "C", "D", "B", "F"]
d、void QList::move ( int from, int to )把第form个放到to个
   QList<QString> list;
   list << "A" << "B" << "C" << "D" << "E" << "F";
   list.move(1, 4);
 // list: ["A", "C", "D", "E", "B", "F"]
4)删除
  
a、int removeAll ( const T & value )    删除列表中对应的所有值,并返回删除的条目的数目。
   eg:
   QList<QString> list;
   list << "sun" << "cloud" << "sun" << "rain";
   qDebug()<<list.removeAll("sun"); //返回2 // list: ["cloud", "rain"]
b、voidremoveFirst();删除最前一个值
c、voidremoveLast();删除最后一个值
d、voidremoveAt(int i);删除某一个值
e、bool removeOne ( const T & value )     删除value中的一个
   eg:
   QList<QString> list;
   list << "sun" << "cloud" << "sun" << "rain";
   qDebug()<<list.removeOne("sun"); //返回true        // list: ["cloud","sun" , "rain"]
f、voidclear ()删除所有
5、其他常用函数
a、int QList::count () const 返回个数
b、int QList::count ( const T & value ) const返回值为valuede的个数
c、bool QList::contains ( const T & value ) const返回是否有value值,有返回true,无返回false
d、int QList::indexOf ( const T & value, int from = 0 ) const
   eg: 
   QList<QString> list;
   list << "A" << "B" << "C" << "B" << "A";
   list.indexOf("B");          // returns 1
   list.indexOf("B", 1);       // returns 1
   list.indexOf("B", 2);       // returns 3
   list.indexOf("X");          // returns -1
e、boolempty () const
f、boolendsWith ( const T & value ) const
g、T QList::value ( int i ) const 类似于at(i);
对于字符串链表,Qt提供了QStringList类。它继承自QList,但还提供了一些其他便于使用字符串的函数:
QStringList::join()、QStringList::find()、QStringList::split()。

B.关联容器:

1、QMap

QMap 是一个升序键顺序存储键值对的数据结构,可以提供良好的查找和插入性能以及键序的迭代。
1) 插入的方式:
   QMap<QString,int> map;
   map.insert("aaa",1);
   map.insert("bbb",2);
   map["ccc"] = 3;
   *:[ ]操作符即可以作为插入时来使用,也可以用来访问数据元素。
2) 访问数据元素:
  用[]操作符
  用value,比如:
  int val = map.value("aaa");

2、QHash

QHash是一个在Hash表中存储键值对的数据结构。提供了比QMap更快的查找功能。

3、键值对

0 0
原创粉丝点击