欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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;
}
相关标签: QT设计相关