Qt容器使用

来源:互联网 发布:艾默生网络被收购 编辑:程序博客网 时间:2024/06/06 03:42

Qt容器使用

1.值容器
 QList:编写Qt程序时优先考虑使用此容器,支持下标快速访问, QList的实现比较特殊, 内部存储的是一段连续的数组指针,
 当存储的类型小于指针大小(如char),或者是指针或者是Qt的隐式共享类(Implicit Sharing)时,那么QList会直接存储这些类型.
 数据量在1000以内,QList任何地方插入都非常快,因为QList已经提前在前面和后面分配了内存. 但当存储
 的类型大小大于指针大小且不隐式共享时, 每次的插入都要从堆中分配内存,还不如QVector内存分配机制
 QVector:在连续空间内分配空间, 支持下标快速访问.根据存储的数据个数内存重新分配时会分配多余空间.
 QLinkedList:Qt中真正的链表, 只能使用迭代器访问
 QStack:继承QVector, 具有栈的特性
 QQueue:继承QList, 具有队列的特性
 
 Qt优先使用QList除了存储访问有优势外, 另一个重要原因是它提供了几个很方便的接口
 int removeAll(const T &value) //删除所有value值
 bool removeOne(const T &value) // 删除遇到的第一个value值
 void removeAt(int i ) //删除指定下标值
 T takeAt(int)  // 删除指定下标值并返回该值
 T value(int i) const // 返回第i下标值, 如果i超出有效范围,返回此类型的默认值
 T value(int i , const T &defaultvalue) // 返回第i下标值, 如果i超出有效范围,返回defaultvalue值
 
 综合上述, 当要存储自定义类型值(大小大于指针大小且没有隐式共享)时使用QVector, 否则使用QList

2.字典容器
 QMap 使用键值对, 键值按顺序排列, 键值需要提供<. 如果在乎键排序使用此容器.QMultiMap可存储多键值
 QHash使用键值对, 查找速度快, 键值任意排列,键值需要提供=. 只在乎查找速度使用此容器,QMultiHash可存储多个键值.
 QSet 存储单一值, 查找速度快, 排列任意.

3.各容器时间复杂度

 

QLinkedList<T>

O(n)

O(1)

O(1)

O(1)

QList<T>

O(1)

O(n)

Amort. O(1)

Amort. O(1)

QVector<T>

O(1)

O(n)

O(n)

Amort. O(1)

 


Key lookupInsertionAverageWorst caseAverageWorst case

QMap<Key, T>

O(log n)

O(log n)

O(log n)

O(log n)

QMultiMap<Key, T>

O(log n)

O(log n)

O(log n)

O(log n)

QHash<Key, T>

Amort. O(1)

O(n)

Amort. O(1)

O(n)

QSet<Key>

Amort. O(1)

O(n)

Amort. O(1)

O(n)

 

原创粉丝点击