一.
QVector容器是一个动态数组,可以容纳任意数量的元素,在相邻的内存中存储给定的数据类型作为一组数据,在QVector前部或中间位置插入元素都会导致内存中大量的数据元素移动,这使得操作速度会减慢.可使用迭代器对这组数据进行访问.
和其他的容器类型类似,QVector容器的功能也有添加元素append(),删除元素remove(),修改元素replace(),查询contains(),访问.......
vStarts<<"鹿晗"<<"热巴"; //添加(尾部插入)
vStarts.append("杨紫"); //头部插入
vStarts.prepend("Anglebaby"); //尾部插入
vStarts.insert(2,"小明"); //指定位置插入
vStarts.replace(2,"迪丽热巴");//替换
//删除元素下标为0的元素
vStarts.remove(0);
//删除某个元素
vStarts.removeAll("鹿晗"); //移除所有比较结果相同的元素
vStarts.removeAt(0); //移除指定位置的元素
vStarts.removeOne("杨紫"); //移除比较结果相同的第一个元素
vStarts.clear();删除所有元素
qDebug()<<"是否有小明?:"<<vStarts.contains("小明");//查询是否有该元素
使用迭代器访问数据.
1.
java风格迭代器
//java风格只读迭代
QVectorIterator<QString> it_sr(vStarts);
for(it_sr.toFront();it_sr.hasNext();){
qDebug() << it_sr.next();
}
//java风格读写迭代
QMutableVectorIterator<QString> it_srw(vStarts);
for(it_srw.toFront();it_srw.hasNext();){
QString s = it_srw.next();
//方式1.使用QString类型的compare()方法比较字符串.比较结果相同则返回0(假).
if(!QString::compare(s,"热巴")){
it_srw.setValue("赵丽颖");
}
//方式2.
//if(s == "热巴"){
// it_srw.setValue("赵丽颖");
//}
}
2.
STL风格迭代器.
//STL读写迭代器
QVector<QString>::iterator it_VWR;
it_VWR = vStarts.begin();
for(;it_VWR != vStarts.end();++it_VWR){
*it_VWR = *it_VWR + "好人";
qDebug()<<*it_VWR;
}
//STL只读迭代器
QVector<QString>::const_iterator it_VR;
it_VR = vStarts.constBegin();
for(;it_VR != vStarts.constEnd();++it_VR){
qDebug()<<*it_VR;
}
二.
容器QMap类型由键(key)值(value)对组成一个元素.通过键key映射到值value.
第一个QString数据类型值是键key,第二个QString数据类型值是值value.一个键对应一个值,以key字母顺序(A~Z)存储数据.
//一个键对应一个值
QMap<QString,QString> infoMap;
//添加元素
infoMap.insert("王祖蓝","163cm"); //方式1
infoMap["姚明"] = "226cm"; //方式2
infoMap.insertMulti("易烊千玺","173cm"); //方式3.如果映射中已经存在具有相同键的项,则该函数将简单地创建一个新项
通过key找value
qDebug() <<"姚明:" <<infoMap["姚明"]; //226cm
qDebug() <<"易烊千玺:" <<infoMap.value("易烊千玺"); //173cm
通过value找key
qDebug()<<"173cm的是谁呢?"<<infoMap.key("173cm"); //易烊千玺
1.
java风格迭代器
与QVector容器迭代器非常类似,打印时要把迭代器位置指向下一个位置.同时打印键值对只能分别把键key和值value写出来,不能把俩个键值对当做一个整体来打印输出.
//java风格只读迭代器
QMapIterator<QString,QString> it_r(infoMap);
for(it_r.toFront();it_r.hasNext();){
//方式1
//it_r.next();
//qDebug()<<it_r.key() <<":"<<it_r.value();//以key的字母A~Z作为排序的依据.有序存储.
//方式2
qDebug()<<it_r.next().key() <<":"<<it_r.value();
}
//java风格读写迭代器
QMutableMapIterator<QString,QString> it_rw(infoMap);
if(it_rw.findNext("163cm")){ //查找元素
it_rw.setValue("163.1cm"); //重新设置元素值value
}
for(it_rw.toFront();it_rw.hasNext();){
it_rw.next();//获取元素
qDebug()<<it_rw.key()<<":"<<it_rw.value();
}
2.
STL风格迭代器
//STL风格读写迭代器
QMap<QString,QString>::iterator it_QWR;
it_QWR = wMap1.begin();
for(;it_QWR != wMap1.end();++it_QWR){
qDebug()<<it_QWR.key()<<it_QWR.value() + "-STL";
}
//STL风格只读迭代器
QMap<QString,QString>::const_iterator it_QR;
it_QR = wMap1.constBegin();
for(;it_QR != wMap1.constEnd();++it_QR){
qDebug()<<it_QR.key()<<it_QR.value() + "-stl";
}
3.
前面讲的是一个键对应一个值的情况,下面是一个键对应多个值的情况.
//一个键对应对多个值
QMultiMap<QString,QString> wMap1;
wMap1.insert("spring","15°C");
wMap1.insert("summer","35°C");//一个键key插入多个值value
wMap1.insert("summer","39°C");
wMap1.insert("summer","40°C");
wMap1.insert("autumn","23°C");
wMap1.insert("winter","-5°C");
wMap1.insert("winter","-15°C");
wMap1.insert("winter","-55°C");
wMap1.remove("winter","-55°C"); //删除元素
//打印一个键的多个值(键值对).所有winter键key的键值对都会被打印出来
qDebug()<<endl<<"winter:"<<wMap1.values("winter");
通过value()函数,参数填写键值key,就能打印所有相同键的值value.即一个键key的对应的多个值value.使用迭代器访问的方式与上面一样.
三.
QHash容器与QMap容器一样,也是使用键值对的方式存储数据,它实现了一个哈希表,通过哈希函数将键映射到值,数据存放无序,任意顺序存储,所以它的存储速度比QMap更快.
//QHash类,数据存放无序
QHash<int,QString> moneyHash;
moneyHash.insert(1,"一块钱");
moneyHash.insert(10,"十块钱");
moneyHash.insert(20,"二十块钱"); //方式1
moneyHash[50] = "五十块钱"; //方式2
moneyHash[100] = "一百块钱";
moneyHash.insertMulti(100,"毛爷爷"); //一个键有多个值使用函数insertMulti()插入
//该方式让前面key为100的value"一百块钱"会被"毛爷爷"覆盖,insertMulti():一个键多个值会被保存
//moneyHash[100] = "毛爷爷";
需要注意的是,如果一个键映射多个值,使用方式2并不能添加一个新的键值对,它只会在同一个键的键值对上,把前面相同键的值覆盖掉.所以使用insertMulti()函数才会添加新的键值对,而不会覆盖原有的键值对.
1.
java风格迭代器
迭代器的使用方式和上面的一样,这里就不一一列举了.
//java风格只读迭代器
QHashIterator<int,QString> it_mr(moneyHash);
//java风格读写迭代器
QMutableHashIterator<int,QString> it_mrw(moneyHash);
2.
STL风格迭代器
由于迭代器的访问方式和前面的QMap类似,就不一一详细说明.
//STL读写迭代器
QHash<int,QString>::iterator it_SWR;
//STL只读迭代器
QHash<int,QString>::const_iterator it_SR;
all~~