日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

QT—常用容器 QStringList,QVector,QMap,QHash,QVariant

發布時間:2023/12/20 c/c++ 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 QT—常用容器 QStringList,QVector,QMap,QHash,QVariant 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

QStringList

元素添加

可以直接添加元素,也可也使用append( )方法在末尾追加元素

QStringList weekList<<"星期一"<<"星期二"<<"星期三"; weekList.append("星期四"); qDebug()<<weekList;

元素遍歷?

?for循環遍歷

QStringList weekList<<"星期一"<<"星期二"<<"星期三"; for(int i=0;i<weekList.size();++i){qDebug()<<weekList[i] <<weekList.at(i); }

foreach遍歷

QStringList weekList<<"星期一"<<"星期二"<<"星期三"; foreach (QString s, weekList) {qDebug()<<s; }

迭代器遍歷

QStringList weekList<<"星期一"<<"星期二"<<"星期三"; QStringList::iterator iter=weekList.begin(); for(;iter!=weekList.end();++iter){qDebug()<<*iter; }

Java風格遍歷

QStringList weekList<<"星期一"<<"星期二"<<"星期三"; //字符串類型的鏈表迭代器 QListIterator<QString> itr(weekList); while(itr.hasNext()){qDebug()<<itr.next(); }

鏈表查找

使用contains( )方法可以查找數組中是否包含該字符串

QStringList weekList<<"星期一"<<"星期二"<<"星期三"; qDebug()<<"鏈表中有星期二:"<<weekList.contains("星期二"); qDebug()<<"鏈表中有星期五:"<<weekList.contains("星期五");

鏈表插入元素

使用insert( )方法可以向鏈表中插入元素,insert( )方法第一個參數表示插入的位置,第二個參數表示要插入的數據

QStringList weekList<<"星期一"<<"星期二"<<"星期三"; weekList.insert(4,"星期五"); qDebug()<<weekList;

鏈表刪除元素

removeFirst( )方法可以刪除鏈表頭

removeLast( )方法可以刪除鏈表尾

removeOne(str)方法可以刪除指定元素

removeAt(int)可以刪除指定位置元素

clear( )方法可以清空鏈表?

QStringList weekList<<"星期一"<<"星期二"<<"星期二"<<"星期二"<<"星期三"<<"星期四"<<"星期五"; qDebug()<<weekList; //5.鏈表刪除元素 weekList.removeFirst();//刪除頭 qDebug()<<"刪除鏈表頭:"<<weekList; weekList.removeLast();//刪除尾 qDebug()<<"刪除鏈表尾:"<<weekList; weekList.removeOne("星期一");//刪除指定元素 qDebug()<<"刪除指定元素星期二:"<<weekList; weekList.removeAt(1);//刪除指定位置 qDebug()<<"刪除3位置元素:"<<weekList; weekList.clear();//清空鏈表 qDebug()<<"清空鏈表:"<<weekList;

QVector?

QVector在相鄰的內存中存儲給定數據類型T的一組數據。在QVector前部或中間位置插入操作速度都很慢,因會導致內存中大量的數據移動。訪問數據可使用下標,也可使用迭代器。繼承自QVector類的子類有QPolygon、QPolygonF、QStack。

添加元素

QVector<QString> vPeople; //添加元素 vPeople<<"小明"<<"小王"<<"小李"; vPeople.push_back("小孫"); vPeople.append("小張");//尾加 vPeople.prepend("人物:");//頭加 vPeople.insert(5,"小麗"); qDebug()<<vPeople;

修改刪除元素

QVector<QString> vPeople; vPeople<<"小明"<<"小王"<<"小李"<<"小孫"<<"小張"; qDebug()<<"修改前"<<vPeople; //修改刪除元素 vPeople.replace(2,"無名氏");//修改元素 vPeople.removeLast();//刪除元素 vPeople.remove(1); //刪除指定位置元素 vPeople.removeAll("小明");//刪除所有的指定元素 qDebug()<<"修改后:"<<vPeople;

下標索引和判斷鏈表是否包含某個元素

QVector<QString> vPeople; vPeople<<"小明"<<"小王"<<"小李"<<"小孫"<<"小張"; qDebug()<<"第三個People:"<<vPeople[2]; qDebug()<<"是否有小明:"<<vPeople.contains("小明");

Java風格的遍歷和讀寫?

QVector<QString> vPeople; vPeople<<"小明"<<"小王"<<"小李"<<"小孫"<<"小張"; qDebug()<<"只讀遍歷:"; QVectorIterator<QString> it_sr(vPeople); for(it_sr.toFront();it_sr.hasNext();){qDebug()<<it_sr.next(); }QMutableVectorIterator<QString> it_srw(vPeople); for(it_srw.toFront();it_srw.hasNext();){QString str=it_srw.next();if(str=="小王"){it_srw.setValue("小王王");}if(!QString::compare(str,"小明")){it_srw.remove();} } qDebug()<<"修改后的數據:"; qDebug()<<vPeople;

QMap

概述

QMap與QHash差別:

①QHash比QMap查找速度更快。

②QHash以任意順序存儲,QMap以Key順序存儲數據。

③QHash的Key必須提供operator==()及一個全局的qHash(Key)函數,而QMap的Key必須提供operator<()函數。

存儲一鍵多值數據時可使用QMultiMap<Key,T>容器或QMultiHash<Key,T>容器。

Java風格迭代器

容器類

只讀迭代器

讀寫迭代器

QMap<Key,T>,QMultiMap<Key,T>

QMapIterator<Key,T>

QMutableMapIterator<Key,T>

QHash<Key,T>,QMultiHash<Key,T>

QHashIterator<Key,T>

QMutableHashIterator<Key,T>

STL風格迭代器

容器類

只讀迭代器

讀寫迭代器

QMap<Key,T>,QMultiMap<Key,T>

QMap<Key,T>::const_iterator

QMap<Key,T>::iterator

QHash<Key,T>,QMultiHash<Key,T>

QHash<Key,T>::const_iterator

QHash<Key,T>::iterator

數據添加

QMap<QString,QString> infoMap; //數據添加 infoMap.insert("小明","168cm");//直接傳鍵值對 infoMap.insert("小張","170cm"); infoMap["小麗"]="168cm"; qDebug()<<infoMap;

元素查找

QMap<QString,QString> infoMap; //數據添加 infoMap.insert("小明","168cm");//直接傳鍵值對 infoMap.insert("小張","170cm"); infoMap["小麗"]="168cm"; //通過key,找value qDebug()<<"小明的身高:"<<infoMap["小明"]; qDebug()<<"小張的身高:"<<infoMap.value("小張");//通過value,找key qDebug()<<"168cm的是:"<<infoMap.key("168cm");

Java風格迭代器

?只讀迭代器遍歷

QMap<QString,QString> infoMap; //數據添加 infoMap.insert("小明","168cm");//直接傳鍵值對 infoMap.insert("小張","170cm"); infoMap["小麗"]="168cm"; //只讀迭代器遍歷 QMapIterator<QString,QString> it_r(infoMap); for(it_r.toFront();it_r.hasNext();){it_r.next();qDebug()<<"Key:"<<it_r.key()<<" Value:"<<it_r.value(); }

使用Java風格迭代器對鍵值對類型的數據遍歷時,也可也按下面方式遍歷

迭代器不需要先調用next( ) 方法,直使用key( )方法獲取鍵,但是如果需要獲取值就需要先使用next( )方法

QMapIterator<QString,QString> it_r(infoMap); for(it_r.toFront();it_r.hasNext();){qDebug()<<"Key:"<<it_r.key()<<" Value:"<<it_r.next().value(); }

讀寫迭代器

?findNext( sss)函數會向后查找鍵值對的值是與sss匹配,如果匹配則返回true,并且迭代器向后移一位,如果不匹配返回false

QMap<QString,QString> infoMap; //數據添加 infoMap.insert("小明","168cm");//直接傳鍵值對 infoMap.insert("小張","170cm"); infoMap["小麗"]="168cm"; //讀寫迭代器遍歷 QMutableMapIterator<QString,QString>it_mrw(infoMap); for(it_mrw.toFront();it_mrw.hasNext();){if(it_mrw.findNext("168cm")){it_mrw.setValue("170cm");}} qDebug()<<"修改數據后遍歷:"; for(it_mrw.toFront();it_mrw.hasNext();){qDebug()<<"Key:"<<it_mrw.key()<<" Value:"<<it_mrw.next().value(); }

STL風格迭代器

只讀迭代器遍歷

QMap<QString,QString> wMap; wMap.insert("春天","15℃"); wMap.insert("夏天","35℃"); wMap.insert("秋天","23℃"); wMap.insert("冬天","-3℃");QMap<QString,QString>::const_iterator i_r; //只讀迭代器遍歷 i_r=wMap.constBegin(); for(;i_r!=wMap.constEnd();++i_r){qDebug()<<"Key:"<<i_r.key()<<" Value:"<<i_r.value(); }

讀寫迭代器

QMap<QString,QString> wMap; wMap.insert("春天","15℃"); wMap.insert("夏天","35℃"); wMap.insert("秋天","23℃"); wMap.insert("冬天","-3℃");QMap<QString,QString>::iterator it_rw; it_rw = wMap.find("春天"); if(it_rw!=wMap.end()){it_rw.value()="16攝氏度"; } qDebug()<<"修改春天的數據后遍歷:"; it_rw=wMap.begin(); for(;it_rw!=wMap.end();it_rw++){qDebug()<<"Key:"<<it_rw.key()<<" Value:"<<it_rw.value();// qDebug()<<*it_rw; 解引用只能打印出值}

QMultiMap

QMultiMap允許插入重復的鍵

插入數據

QMultiMap<QString,QString>wPeople; wPeople.insert("小明","168"); wPeople.insert("小王","167"); wPeople.insert("小張","172"); wPeople.insert("小明","170"); wPeople.insert("小王","176"); wPeople.insert("小王","172"); qDebug()<<wPeople;

元素移除

QMultiMap<QString,QString>wPeople; wPeople.insert("小明","168"); wPeople.insert("小王","167"); wPeople.insert("小張","172"); wPeople.insert("小明","170"); wPeople.insert("小王","176"); wPeople.insert("小王","172"); qDebug()<<"移除前:"<<wPeople; wPeople.remove("小王","172"); qDebug()<<"移除后:"<<wPeople;

查找鍵對應的所有的值

QMultiMap<QString,QString>wPeople; wPeople.insert("小明","168"); wPeople.insert("小王","167"); wPeople.insert("小張","172"); wPeople.insert("小明","170"); wPeople.insert("小王","176"); wPeople.insert("小王","172"); qDebug()<<wPeople; qDebug()<<wPeople.values("小王");

Java風格的迭代

只讀迭代器遍歷

QMultiMap<QString,QString>wPeople; wPeople.insert("小明","168"); wPeople.insert("小王","167"); wPeople.insert("小張","172"); wPeople.insert("小明","170"); wPeople.insert("小王","176"); wPeople.insert("小王","172"); QMapIterator<QString,QString> i_r(wPeople); for(i_r.toFront();i_r.hasNext();){//鍵可以直接拿qDebug()<<i_r.key()<<":"//值需要先索引下一個位置<<i_r.next().value(); }

QHash?

?數據插入

QHash<int,QString> moneyHash; moneyHash.insert(1,"一塊錢"); moneyHash.insert(2,"十塊錢"); moneyHash.insert(10,"三塊錢"); moneyHash[50]="五十塊錢"; //插入重復鍵需要使用insertMulti方法,否則就會被舊值會被新值覆蓋 moneyHash.insertMulti(50,"一百塊錢"); qDebug()<<moneyHash;

Java風格遍歷

QHash<int,QString> moneyHash; moneyHash.insert(1,"一塊錢"); moneyHash.insert(2,"十塊錢"); moneyHash.insert(10,"三塊錢"); moneyHash[50]="五十塊錢"; //插入重復鍵需要使用insertMulti方法,否則就會被舊值會被新值覆蓋 moneyHash.insertMulti(50,"一百塊錢"); QHashIterator<int,QString> it_mr(moneyHash); qDebug()<<"只讀正遍歷"; for(it_mr.toFront();it_mr.hasNext();){qDebug()<<it_mr.key()<<":"<<it_mr.next().value();}

QVariant?

QVariant類是Qt的共用體union數據類型,不僅能保存很多Qt類型的值,包括QColor,QBrush,QFont,QRect,QString及QSize等等,而且能存放Qt的容器類型值。

可采用toT()將QVariant對象轉換稱為T類型并獲取其值。如toInt(),toFloat(),toString(),可用type方法獲取數據類型,判斷數據是否可。對于GUI模塊中定義的數據類型沒有相應的轉換函數,即沒有toColor(),沒有toImage()這樣的函數提供,可通過value()方法實現轉換,判斷兩種類型是否可以轉換時可通過canConvert()方法的返回值判斷。

基本數據類型

QVariant vNum(100); qDebug()<<vNum.toInt();QVariant vPI(3.14); qDebug()<<vPI.toFloat();QVariant vStr("Hello World"); qDebug()<<vStr.toString();QVariant vB(true); qDebug()<<vB.toBool();

GUI數據類型

?

QColor c =QColor(Qt::red); QVariant vC=c; qDebug()<<vC.type(); qDebug()<<vC.value<QColor>();

canConvert( )與convert( )方法

?canConvert( )方法返回的是轉換能力,也就是是否有轉換成要求類型的能力,例如canConvert(QVariant::int)返回的就是true,canConvert(QVariant::QColor)返回的就是false

convert( )是將調用類型轉換成要求的類型,如果不能轉換,例如“Hello"要轉int就會失敗,同時轉換失敗會將調用者清空數據。

QVariant vss="Hello"; //轉換//canConvert返回的是函數轉換的能力(例如是否有轉換成int類型的能力), //但不一定能轉換成功,還要根據提供的數據qDebug()<<vss.canConvert(QVariant::Int); qDebug()<<"vss:"<<vss.toString(); //convert 如果提供的數據不合適,會轉換失敗,同時數據也會被清空 qDebug()<<vss.convert(QVariant::Int); qDebug()<<"vss:"<<vss.toString();

?

?

?

總結

以上是生活随笔為你收集整理的QT—常用容器 QStringList,QVector,QMap,QHash,QVariant的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 美女试爆场恐怖电影在线观看 | 免费看a级黄色片 | 蜜臀av免费在线观看 | 亚洲小视频在线播放 | 熟妇高潮精品一区二区三区 | 午夜黄色网址 | 一级片免费网站 | 亚洲五级片 | 伊人avav| 动漫美女无遮挡免费 | 少妇被又大又粗又爽毛片久久黑人 | 爽天天天天天天天 | 日韩国产在线一区 | 日韩一区二区在线视频 | 一区二区三区视频在线观看免费 | 黄色视屏在线播放 | 深田咏美av在线 | 在线综合色 | 激情久久久久 | 一区二区三区在线免费观看视频 | 黄色网页免费在线观看 | 亚洲伦理一区二区三区 | 欧美a免费 | 久久免费少妇高潮久久精品99 | 少妇被又大又粗又爽毛片久久黑人 | 不卡一二三 | 中文 日韩 欧美 | 捆绑调教在线观看 | 日韩av手机在线观看 | 亚洲av人人澡人人爽人人夜夜 | 奇米影视四色7777 | 久操综合| 国产激情久久 | 麻豆日韩| 免费av电影网址 | 国产精品伦一区二区三区免费看 | 一区二区日韩国产 | 精品人妻一区二区三区久久夜夜嗨 | 午夜久久久久久 | 成人自拍视频在线观看 | 亚洲最大av | 成人免费观看视频大全 | 欧美3p在线观看 | 体感预报日剧 | 黄色网av | 亚洲在线观看一区二区 | 日韩精品观看 | 国产免费看 | 中文字幕亚洲精品在线观看 | 免费在线播放毛片 | 亚洲欧美乱日韩乱国产 | 国产xxx视频 | fc2成人免费视频 | 欧美激情在线播放 | 亚洲欧洲另类 | 国产成人无码www免费视频播放 | 亚洲精品aⅴ | 捆绑调教sm束缚网站 | 91 免费看片| 96人xxxxxxxxx69 | 97在线观看视频免费 | 深夜激情影院 | 久久在线免费视频 | 性高潮久久久久久 | 四虎影视成人永久免费观看亚洲欧美 | 人妻一区二区三区在线 | 一级黄在线观看 | 亚洲黄色免费 | 中国女人毛茸茸 | 中文字幕影片免费在线观看 | 国产精品高潮呻吟久久久久久 | 蜜桃精品成人影片 | 天天摸夜夜爽 | 亚洲av无码国产精品久久 | 欧美 亚洲 另类 激情 另类 | www欧美com| 欧美日韩精品综合 | 亚洲av无码一区二区三区在线 | 一个人在线免费观看www | 女同性αv亚洲女同志 | 亚洲熟妇无码一区二区三区导航 | 日本二区视频 | 久久精品—区二区三区舞蹈 | 含羞草一区二区三区 | 日韩性在线 | 日本大奶子视频 | 国产精品久久久久久久久久辛辛 | 亚洲资源网站 | 欧美精品乱码99久久蜜桃 | 欧美巨乳在线 | 老司机在线看片 | 在线亚洲欧美 | 国产一级三级 | 亚洲男人第一天堂 | www.四虎在线| 在线欧美a| 国产男女精品 | 美女精品在线观看 | 成人在线观看小视频 |