Qt容器类的分类:
A.连续容器:QVector,QLinkedList,QList
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"]
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"]
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"]
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";
QList<QString> list;
list << "sun" << "cloud" << "sun" << "rain";
qDebug()<<list.removeAll("sun"); //返回2 // list: ["cloud", "rain"]
b、void removeFirst();删除最前一个值
c、void removeLast();删除最后一个值
d、void removeAt(int i);删除某一个值
e、bool removeOne ( const T & value ) 删除value中的一个
eg:
QList<QString> list;
list << "sun" << "cloud" << "sun" << "rain";
QList<QString> list;
list << "sun" << "cloud" << "sun" << "rain";
qDebug()<<list.removeOne("sun"); //返回true // list: ["cloud","sun" , "rain"]
f、void clear ()删除所有
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
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、bool empty () const
f、bool endsWith ( 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");
1) 插入的方式:
2) 访问数据元素:
2、QHash
QHash是一个在Hash表中存储键值对的数据结构。提供了比QMap更快的查找功能。