Qt的通用容器类之一QList<T>类介绍

QList类

QList类是一个提供列表的模板类,要使用这个类,头文件需要导入QList库:

#include <QList>

在qmake.pro文件中加入QList类的支持:

QT += core

QList的派生类有:QByteArrayList, QItemSelection, QQueue还有 QStringList

公共类型:

class const_iterator
class iterator
typedef ConstIterator
typedef Iterator
typedef const_pointer
typedef const_reference
typedef const_reverse_iterator
typedef difference_type
typedef pointer
typedef reference
typedef reverse_iterator
typedef size_type
typedef value_type

公共方法

QList(InputIterator first, InputIterator last)
QList(std::initializer_list args)
QList(QList &&other)
QList(const QList &other) 构造other的副本
QList() 构造一个空列表
QList & operator=(QList &&other)
QList & operator=(const QList &other) 将other分配给此列表,并返回对此列表的引用
~QList() 销毁列表
void append(const T &value) QList<QString> list;
list.append(“one”);
list.append(“two”);
list.append(“three”);
// list: [“one”, “two”, “three”]
这与list.insert(size(),value)相同
void append(const QList &value) 这是一个重载函数,将值列表的项目追加到此列表
const T & at(int i) const 返回列表中索引位置i的项,i必须是列表中的有效索引位置(即0 <= i < size())
T & back() 提供此功能是为了STL兼容相当于last(),列表不能为空,如果列表可以是空的,那么在调用这个函数之前先调用isEmpty()
const T & back() const 这是一个重载函数
QList::iterator begin() 返回一个STL风格的迭代器,指向列表中的第一项
QList::const_iterator begin() const 这是一个重载函数
QList::const_iterator cbegin() const 返回指向列表中第一项的常量STL样式迭代器
QList::const_iterator cend() const 返回一个常量STL风格的迭代器,指向列表中最后一项之后的虚项
void clear() 从列表中删除所有项目
QList::const_iterator constBegin() const 返回指向列表中第一项的常量STL样式迭代器
QList::const_iterator constEnd() const 返回一个常量STL风格的迭代器,指向列表中最后一项之后的虚项
const T & constFirst() const 返回列表中第一项的常量引用,列表不能为空,如果列表可以是空的,那么在调用这个函数之前先调用isEmpty()
const T & constLast() const 返回对列表中最后一项的引用,列表不能为空。如果列表可以是空的,那么在调用这个函数之前先调用isEmpty()
bool contains(const T &value) const 如果列表包含值的出现,则返回true否则返回false。此函数要求值类型实现运算符==()
int count(const T &value) const 返回列表中值的出现次数,此函数要求值类型实现运算符==()
int count() const 返回列表中的项目数,这实际上与 size()相同
QList::const_reverse_iterator crbegin() const 返回一个指向列表中第一项的常量STL样式的反向迭代器,顺序相反
QList::const_reverse_iterator crend() const 返回一个常量STL样式的反向迭代器,以相反的顺序指向列表中最后一项之后的一个
bool empty() const 提供此功能是为了STL兼容,它相当于isEmpty(),如果列表为空,则返回true
QList::iterator end() 返回一个STL风格的迭代器,指向列表中最后一项之后的虚项
QList::const_iterator end() const 这是一个重载函数
bool endsWith(const T &value) const 如果此列表不为空且其最后一项等于值,则返回true否则返回false
QList::iterator erase(QList::iterator pos) 从列表中移除与迭代器pos关联的项,并返回列表中下一个项的迭代器(可能是end())
QList::iterator erase(QList::iterator begin, QList::iterator end) 这是一个重载函数,从开始到(但不包括)结束删除所有项目,返回一个迭代器,指向在调用之前结束引用的同一项
T & first() 返回对列表中第一项的引用,列表不能为空。如果列表可以是空的,那么在调用这个函数之前先调用isEmpty()
const T & first() const 这是一个重载函数
T & front() 提供此功能是为了STL兼容,相当于 first(),列表不能为空。如果列表可以是空的,那么在调用这个函数之前先调用isEmpty()
const T & front() const 这是一个重载函数
int indexOf(const T &value, int from = 0) const 返回列表中第一个值的索引位置,从索引位置向前搜索。如果没有匹配的项目,则返回-1;
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”);
void insert(int i, const T &value) QList<QString> list;
list << “alpha” << “beta” << “delta”;
list.insert(2, “gamma”);
// list: [“alpha”, “beta”, “gamma”, “delta”]
QList::iterator insert(QList::iterator before, const T &value) 这是一个重载函数,在迭代器指向的项目前面插入值。返回指向插入项的迭代器。请注意,传递给函数的迭代器在调用后将无效;应该使用返回的迭代器
bool isEmpty() const 如果列表不包含任何项目,则返回true否则返回false
T & last() 返回对列表中最后一项的引用。列表不能为空。如果列表可以是空的,那么在调用这个函数之前先调用isEmpty()
const T & last() const 这是一个重载函数
int lastIndexOf(const T &value, int from = -1) const
int length() const
QList mid(int pos, int length = -1) const
void move(int from, int to)
void pop_back()
void pop_front()
void prepend(const T &value)
void push_back(const T &value)
void push_front(const T &value)
QList::reverse_iterator rbegin()
QList::const_reverse_iterator rbegin() const
int removeAll(const T &value)
void removeAt(int i)
void removeFirst()
void removeLast()
bool removeOne(const T &value)
QList::reverse_iterator rend()
QList::const_reverse_iterator rend() const
void replace(int i, const T &value)
void reserve(int alloc)
int size() const
bool startsWith(const T &value) const
void swap(QList &other) 用此列表交换other列表
void swapItemsAt(int i, int j) 将索引位置I的项目与索引位置j的项目交换
QList<QString> list;
list << “A” << “B” << “C” << “D” << “E” << “F”;
list.swapItemsAt(1, 4);
// list: [“A”, “E”, “C”, “D”, “B”, “F”]
T takeAt(int i) 移除索引位置I处的项并返回它。I必须是列表中的有效索引位置(即0 <= i < size())如果不使用返回值,removeAt()效率更高
T takeFirst() 移除列表中的第一项并返回。这与takeAt(0)相同。该函数假设列表不为空。为了避免失败,请在调用此函数之前调用isEmpty()如果不使用返回值,removeFirst()效率更高
T takeLast() 移除列表中的最后一项并返回。这个和takeAt(size() - 1)一样。该函数假设列表不为空。为了避免失败,请在调用此函数之前调用isEmpty()
QSet toSet() const QStringList list;
list << “Julia” << “Mike” << “Mike” << “Julia” << “Julia”;
QSet<QString> set = list.toSet();
set.contains(“Julia”); // returns true
set.contains(“Mike”); // returns true
set.size(); // returns 2
std::list toStdList() const QList<double> list;
list << 1.2 << 0.5 << 3.14;
std::list stdlist = list.toStdList();
QVector toVector() const QStringList list;
list << “Sven” << “Kim” << “Ola”;
QVector<QString> vect = list.toVector();
// vect: [“Sven”, “Kim”, “Ola”]
T value(int i) const 返回列表中索引位置I的值,如果索引I超出界限,函数将返回一个默认构造的值。如果您确定索引将在范围内,您可以使用at()来代替,这样会稍微快一些
T value(int i, const T &defaultValue) const 这是一个重载函数。如果索引I超出界限,该函数将返回defaultValue
bool operator!=(const QList &other) const 如果other不等于此列表,则返回true否则返回false。如果两个列表以相同的顺序包含相同的值,则它们被视为相等
QList operator+(const QList &other) const 返回一个列表,该列表包含自已列表中的所有项目,然后是other列表中的所有项目
QList & operator+=(const QList &other) 将other列表的项目追加到此列表,并返回对此列表的引用
QList & operator+=(const T &value) 这是一个重载函数。向列表追加值
QList & operator<<(const QList &other) 将other列表的项目追加到此列表,并返回对此列表的引用
QList & operator<<(const T &value) list << “four” << “five”;
colindexs << 15 << 14 << 13 << 11 << 8 << 7 << 6 << 5;
bool operator==(const QList &other) const 如果other等于此列表,则返回true否则返回false。如果两个列表以相同的顺序包含相同的值,则它们被视为相等
T & operator[](int i) 返回i项的引用,可读写:
list[0] == “Bob”
list[0] = “Robert”
const T & operator[](int i) const 这是一个重载函数

静态公共成员

QList fromSet(const QSet &set)
QList fromStdList(const std::list &list)
QList fromVector(const QVector &vector)

相关非成员

uint qHash(const QList &key, uint seed = 0)
bool operator<(const QList &lhs, const QList &rhs)
QDataStream & operator<<(QDataStream &out, const QList &list)
bool operator<=(const QList &lhs, const QList &rhs)
bool operator>(const QList &lhs, const QList &rhs)
bool operator>=(const QList &lhs, const QList &rhs)
QDataStream & operator>>(QDataStream &in, QList &list)

详细描述

QList是Qt的通用容器类之一,它将项目存储在一个列表中,该列表提供基于索引的快速访问和基于索引的插入和删除。
QList、QLinkedList < T >、QVector提供了类似的API和功能,它们通常可以互换,但会产生性能后果,以下是用例概述:

  • QVector应该是你默认的首选,QVector通常会比QList给出更好的性能,因为QVector总是在内存中顺序存储它的项目,其中QList将在堆上分配它的项目,除非sizeof(T) <= sizeof(void*)并且T已经使用Q_DECLARE_TYPEINFO声明为Q_MOVABLE_TYPE 或者一个 Q_PRIMITIVE_TYPE
  • 不管怎么说,QList在Qt应用编程接口中始终用于传递参数和返回值
  • 如果你需要一个真正的链表,它保证在链表中间有固定时间的插入,并且使用迭代器来代替索引,那么就使用QLinkedList

注意:QVector和QVarLengthArray都保证C兼容的数组布局,QList没有,如果您的应用程序必须与C

  • 4
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
QStringList 和 QList<QString> 都是Qt框架中用于存储字符串的容器类,它们之间的区别如下: 1. 类型声明方式不同: - QStringList 是Qt提供的一个特殊的容器类,用于存储字符串列表。它是QString的列表,可以直接使用 QStringList 类型声明变量。 - QList<QString> 是Qt提供的通用容器QList 的特化版本,用于存储 QString 类型的元素。它是一个模板类,需要使用 QList<QString> 类型声明变量。 2. 接口和功能略有不同: - QStringList 提供了一些方便操作字符串列表的成员函数,如 append、join、split 等。它还提供了一些特殊的成员函数,如 filter、replaceInStrings 等,用于对字符串列表进行过滤和替换操作。 - QList<QString> 是通用容器类,提供了一些常见的操作函数,如 append、insert、remove 等。它没有 QStringList 针对字符串列表的特殊操作函数。 3. 类型转换方便性不同: - QStringList 可以方便地与 QString 进行相互转换,通过 join 函数可以将 QStringList 转换为一个以指定分隔符连接的字符串,而通过 split 函数可以将一个字符串拆分为 QStringList。 - QList<QString> 需要通过手动遍历列表来进行类型转换,将 QList<QString> 转换为 QString 需要使用 join 函数,将 QString 转换为 QList<QString> 需要使用 split 函数。 综上所述,QStringList 是专门用于存储字符串列表的容器类,提供了一些方便的操作函数;而 QList<QString> 是通用容器类,可以存储任意类型的元素,但对于字符串列表的操作相对较少。根据具体需求,可以选择使用适合的容器类。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值