Qt的容器类——QList

定义: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;
}
  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值