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

QT容器学习

2015-10-03 14:19 387 查看
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、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";
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

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");

2、QHash

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

3、键值对

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