版权声明:若无来源注明,Techie亮博客文章均为原创。 转载请以链接形式标明本文标题和地址:
本文标题:QList和QVector使用 本文地址:http://techieliang.com/2017/12/563/
文章目录
1. 介绍
QVector
The QVector class is a template class that provides a dynamic array.
QVector<T> is one of Qt’s generic container classes. It stores
its items in adjacent memory locations and provides fast index-based
access.QList<T>, QLinkedList<T>, QVector<T>, and
QVarLengthArray<T> provide similar APIs and functionality. They
are often interchangeable, but there are performance consequences. Here
is an overview of use cases:QVector should be your default first choice. QVector<T> will
usually give better performance than QList<T>, because
QVector<T> always stores its items sequentially in memory, where
QList<T> will allocate its items on the heap unless sizeof(T)
<= sizeof(void*) and T has been declared to be either a
Q_MOVABLE_TYPE or a Q_PRIMITIVE_TYPE using Q_DECLARE_TYPEINFO. See the
Pros and Cons of Using QList for an explanation.
However, QList is used throughout the Qt APIs for passing parameters and
for returning values. Use QList to interface with those APIs.
If you need a real linked list, which guarantees constant time
insertions mid-list and uses iterators to items rather than indexes, use
QLinkedList.Note: QVector and QVarLengthArray both guarantee C-compatible array
layout. QList does not. This might be important if your application must
interface with a C API.Note: Iterators into a QLinkedList and references into
heap-allocating QLists remain valid as long as the referenced items
remain in the container. This is not true for iterators and references
into a QVector and non-heap-allocating QLists.Here’s an example of a QVector that stores integers and a QVector that stores QString values:
更多请见QVector
QList:
The QList class is a template class that provides lists.
QList<T> is one of Qt’s generic container classes. It stores
items in a list that provides fast index-based access and index-based
insertions and removals.QList<T>, QLinkedList<T>, and QVector<T> provide
similar APIs and functionality. They are often interchangeable, but
there are performance consequences. Here is an overview of use cases:QVector should be your default first choice. QVector<T> will
usually give better performance than QList<T>, because
QVector<T> always stores its items sequentially in memory, where
QList<T> will allocate its items on the heap unless sizeof(T)
<= sizeof(void*) and T has been declared to be either a
Q_MOVABLE_TYPE or a Q_PRIMITIVE_TYPE using Q_DECLARE_TYPEINFO. See the
Pros and Cons of Using QList for an explanation.
However, QList is used throughout the Qt APIs for passing parameters and
for returning values. Use QList to interface with those APIs.
If you need a real linked list, which guarantees constant time
insertions mid-list and uses iterators to items rather than indexes, use
QLinkedList.Note: QVector and QVarLengthArray both guarantee C-compatible array
layout. QList does not. This might be important if your application must
interface with a C API.Note: Iterators into a QLinkedList and references into
heap-allocating QLists remain valid as long as the referenced items
remain in the container. This is not true for iterators and references
into a QVector and non-heap-allocating QLists.
更多请见QList
QList<T>, QLinkedList<T>, and QVector<T>等使用操作近似,下述范例仅提供QList的
2. QList使用
2.1. 简单范例
- #include <QList>
- #include <QDebug>
- QList<QString> m_list;
- m_list.append("a");//尾插入
- m_list.append("b");
- m_list.append("c");
- qDebug()<<m_list.at(0)<<
- m_list[1]<<
- m_list[m_list.size()-1];
- qDebug()<<m_list.first()<<m_list.last();//取首尾值
- m_list.prepend("t");//头插入
- qDebug()<<m_list.at(0);
- qDebug()<<m_list.takeAt(2);//取出值(会删除原值)
- qDebug()<<m_list.at(2);
运行结果
- "a" "b" "c"
- "a" "c"
- "t"
- "b"
- "c"
2.2. 其他函数
insert在指定位置插入
swap交换两个位置的值
contains是否包含判断
count查找某个值的个数
indexOf找某个值对应的位置
2.3. 迭代器风格
支持Java和STL风格,详情请见Qt容器介绍
转载请以链接形式标明本文标题和地址:Techie亮博客 » QList和QVector使用