Qt的容器类——QList
程序员文章站
2022-06-17 08:00:48
...
定义:QList < T > 以数组列表形式实现,在其前后添加数组非常快。
- 注意Qt中有很多函数返回了QList类型,要遍历这些返回的容器,必须先复制再遍历。因为Qt使用了隐式复制,所以开销并不大。当一个迭代器在操作一个容器时,不要复制这个容器。
1. 初始化
QList<QString> list; //定义QList,存储数据类型为QString
2. 插入
list << "three" << "four"; //插入
list.prepend("five"); //在后面插入
list.removeLast(); //在后面删除
list.append("two"); //在前面插入
list.removeFirst(); //在前面删除
//STL的风格
list.push_back("five");
list.pop_back();
list.push_front("two");
list.pop_front();
3. 访问
list.replace(0,"one"); //位置0元素用"one"替代
list[0] = "one"; //位置0元素用"one"替代
QString aaa = list.at(0);
QString bbb = list[1];
QString ccc = list.last(); //返回最后一个数据项,返回引用
qDebug() << list.constLast(); //返回最后一个数据项,返回常量引用
QString ddd = list.first(); //返回第一个数据项,返回引用
qDebug() << list.constFirst(); //返回第一个数据项,返回常量引用
//STL的风格
QString eee = list.back(); //返回最后一个数据项
QString fff = list.front(); //返回第一个数据项
4. 操作
bool ggg= list.isEmpty(); //判断是否为空
int hhh= list.size(); //返回list中项的个数
bool iii = list.contains("ten"); //判断list中是否有数据项"ten"
list.clear(); //删除列表内所有元素
5. 用Java风格迭代器进行遍历
//Java迭代器指针不指向一个数据项,而是指向数据项之间
QListIterator<QString> i(list); //定义只读迭代器QListIterator,默认指向第一个数据项之前
i.toFront(); //迭代器移动到最前面(第一个数据之前)
while(i.hasNext()) //i后面还有元素
{
qDebug() << i.peekNext(); //返回i后面的元素,迭代器不移动
qDebug() << i.next(); //返回i后面的元素,并且迭代器后移一个位置
}
i.toBack(); //迭代器移动到最后面(最后一个数据之后)
while(i.hasPrevious()) //i前面面还有元素
{
qDebug() << i.peekPrevious(); //返回i前面的元素,迭代器不移动
qDebug() << i.previous(); //返回i前面的元素,并且迭代器前移一个位置
}
QMutableListIterator<QString> i(list); //定义读写迭代器QMutableListIterator
while(i.hasNext())
{
if(i.next() == "one")
i.remove(); //删除刚刚next跳过去的数据项
else
{
i.next();
i.setValue("six"); //修改刚刚next跳过去数据项的值
}
}
6. 用STL风格迭代器进行遍历
//STL风格迭代器是数组的指针,直接指向数据项
QList<QString>::const_iterator i; //定义只读迭代器const_iterator
for(i = list.cbegin();i != list.cend();i++) //cbegin()表示指向起始数据项,cend()表示指向超尾数据项
qDebug() << *i; //i++使STL迭代器指向下一个数据项,*i返回数据项的值
for(i = list.begin();i != list.end();i++) //begin()表示指向起始数据项,end()表示指向超尾数据项
qDebug() << *i;
for(i = list.constBegin();i != list.constEnd();i++) //constBegin和constEnd用于只读迭代器
qDebug() << *i;
QList<QString>::const_reverse_iterator i; //定义只读反向迭代器const_reverse_iterator
for(i = list.crbegin();i != list.crend();i++)
qDebug() << *i;
for(i = list.rbegin();i != list.rend();i++)
qDebug() << *i;
QList<QString>::iterator i; //定义读写迭代器iterator
for(i = list.begin();i != list.end();i++)
qDebug() << *i;
QList<QString>::reverse_iterator i; //定义读写反向迭代器reverse_iterator
for(i = list.rbegin();i != list.rend();i++)
qDebug() << *i;
7. 用foreach进行遍历
- Qt的foreach宏进行遍历时会创建容器的一个副本,不能修改原来的数据项。
QString str;
foreach(const QString &str,list)
{
if(str.isEmpty())
break;
qDebug() << str;
}
上一篇: 快速了解Maven Life Cycle
下一篇: Qt的容器类——QMap