一.
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"); //方式1infoMap["姚明"] = "226cm"; //方式2infoMap.insertMulti("易烊千璽","173cm"); //方式3.如果映射中已經存在具有相同鍵的項,則該函數將簡單地創建一個新項
通過key找value
qDebug() <<"姚明:" <<infoMap["姚明"]; //226cmqDebug() <<"易烊千璽:" <<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作為排序的依據.有序存儲.//方式2qDebug()<<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插入多個值valuewMap1.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,"二十塊錢"); //方式1moneyHash[50] = "五十塊錢"; //方式2moneyHash[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~~