容器(QT版)
一、QStringList
1.1 添加元素
QStringList添加元素的方法有两个:1、使用输出运算符。2、调用append方法
QStringList strList; //创建QStringList对象
//输出运算符添加元素
strList << "第一串字符" << "第二串字符";
//调用append方法
strList.append("第三串");
QStringList有 insert 方法可以进行元素的插入
//调用insert方法
strList.insert(0,"首字符串"); //在开头插入字符
1.2 遍历元素
- 普通for循环遍历
for(int i=0; i<strList.size(); i++){
qDebug() << strList.at(i);
// qDebug() << strList[i];
}
- foreach遍历
foreach(QString str,strList){
qDebug() << str;
}
- STL风格迭代器
QStringList::iterator it = strList.begin();
for(; it!=strList.end(); it++){
qDebug() << *it;
}
- java风格迭代器
QListIterator<QString> strIt(strList);
while(strIt.hasNext()){
qDebug() << strIt.next();
}
1.3 寻找元素
- at方法
可以使用at方法,参数为元素所在位置。 - []运算符
使用[]运算符,传入内容为元素所在位置,访问元素值 - contains方法
使用contains方法,参数为寻找的元素,会判断QStringList中是否存在寻找的元素,存在返回true,不存在返回false。
strList.contains("第一串字符");
1.4 删除元素
- 删除首元素
strList.removeFirst();
- 删除尾元素
strList.removeLast();
- 删除某个元素
strList.removeOne("第一串字符");
- 删除指定位置元素
strList.removeAt(1); //删除第二个位置的元素
- 清空所有元素
strList.clear();
二、QList
2.1 添加元素
QList添加元素的方法:
1、使用输出运算符。2、调用append方法。3、调用insert方法。4、调用prepend方法。
QList<QString> list; //创建QList对象
//输出运算符添加元素
list << "list字符串1" << "list字符串2";
//调用append方法
list.append("list字符串3");
//调用insert方法
list.insert(1,"插入的字符串"); //在第2个位置插入字符
//调用prepend方法
list.prepend("首字符"); //开头插入元素
2.2 遍历元素
- STL风格迭代器
读写迭代器
QList<QString>::iterator it = list.begin();
for(; it!=list.end(); it++){
qDebug() << *it;
}
只读迭代器
QList<QString>::const_iterator it_const = list.constBegin();
for(; it_const!=list.constEnd(); it_const++){
qDebug() << *it_const;
}
- java风格迭代器
读写迭代器
QMutableListIterator<QString> mlIt(list);
//从最后一个元素往前遍历
for(mlIt.toBack(); mlIt.hasPrevious();){
qDebug() << mlIt.previous();
}
只读迭代器
QListIterator<QString> itList(list);
//从第一个元素往后遍历
for(itList.toFront(); itList.hasNext();){
qDebug() << itList.next();
}
以上读写迭代器可以对元素进行修改/插入/删除,只读迭代器只能进行遍历。
2.3 寻找元素
- at方法
可以使用at方法,参数为元素所在位置。 - []运算符
使用[]运算符,传入内容为元素所在位置,访问元素值 - contains方法
使用contains方法,参数为寻找的元素,会判断QList中是否存在寻找的元素,存在返回true,不存在返回false。
list.contains("list字符串1");
2.4 删除元素
- 删除首元素
list.removeFirst();
- 删除尾元素
list.removeLast();
- 删除某个元素
list.removeOne("list字符串1");
- 删除指定位置元素
list.removeAt(1); //删除第二个位置的元素
- 清空所有元素
list.clear();
2.5 修改元素
- replace方法
//将第三个元素进行修改
list.replace(2,"变更第三个字符");
- []运算符
//将第二个元素进行修改
list[1] = "变更第2个字符";
- setValue方法
这个方法是在Java风格的读写迭代器中进行使用,可对元素进行修改。
QMutableListIterator<QString> mlIt(list);
//从最后一个元素往前遍历
for(mlIt.toBack(); mlIt.hasPrevious();){
mlIt.previous();
if(mlIt == "list字符串1"){
mlIt.setValue() = "变更第一个字符串";
}
}
三、QLinkedList
3.1 添加元素
与QList方法一致。
3.2 遍历元素
- STL风格迭代器
读写迭代器
QLinkedList<QString>::iterator linkListIt = linkList.begin();
for(; linkListIt!=linkList.end(); linkListIt++){
qDebug() << *linkListIt;
}
只读迭代器
QLinkedList<QString>::const_iterator linkIt_const = linkList.constBegin();
for(; linkIt_const !=linkList.constEnd(); linkIt_const ++){
qDebug() << *linkIt_const ;
}
- java风格迭代器
读写迭代器
QMutableLinkedListIterator<QString> mlIt(linkList);
//从最后一个元素往前遍历
for(mlIt.toBack(); mlIt.hasPrevious();){
qDebug() << mlIt.previous();
}
只读迭代器
QLinkedListIterator<QString> itList(linkList);
//从第一个元素往后遍历
for(itList.toFront(); itList.hasNext();){
qDebug() << itList.next();
}
以上读写迭代器可以对元素进行修改/插入/删除,只读迭代器只能进行遍历。
3.3 寻找元素
QLinkedList只有contains方法,
参数为寻找的元素,会判断QLinkedList中是否存在寻找的元素,存在返回true,不存在返回false。
linkList.contains("list字符串1");
3.4 删除元素
- 删除首元素
linkList.removeFirst();
- 删除尾元素
linkList.removeLast();
- 删除某个元素
linkList.removeOne("linkList字符串1");
- 清空所有元素
linkList.clear();
3.5 修改元素
没有replace方法和下标访问法。
setValue方法使用与QList一样。
四、QVector
4.1 添加元素
与QList方法一致。
QVector<QString> vector; //创建QList对象
vector << "vector容器元素1" << "vector容器元素2";
//调用append方法
vector.append("vector容器元素3");
vector.insert(0,"vector容器首元素");
4.2 遍历元素
- STL风格迭代器
读写迭代器
QVector<QString>::iterator vectorIt = vector.begin();
for(; vectorIt!=vector.end(); vectorIt++){
qDebug() << *vectorIt;
}
只读迭代器
QVector<QString>::const_iterator vectorIt_const = vector.constBegin();
for(; vectorIt_const!=vector.constEnd(); vectorIt_const++){
qDebug() << *vectorIt_const;
}
- java风格迭代器
读写迭代器
QMutableVectorIterator<QString> mVIt(vector);
//从最后一个元素往前遍历
for(mVIt.toBack(); mVIt.hasPrevious();){
qDebug() << mVIt.previous();
}
只读迭代器
QVectorIterator<QString> itVector(vector);
//从第一个元素往后遍历
for(itVector.toFront(); itVector.hasNext();){
qDebug() << itVector.next();
}
以上读写迭代器可以对元素进行修改/插入/删除,只读迭代器只能进行遍历。
4.3 寻找元素
与QList一样,有 at方法,支持[]运算符,有 contains方法。
4.4 删除元素
- 删除首元素
linkList.removeFirst();
- 删除尾元素
linkList.removeLast();
- 删除某个元素
linkList.removeOne("vector容器元素1");
- 清空所有元素
linkList.clear();
- 删除指定位置元素
linkList.removeAt(2);
3.5 修改元素
与QList一样,有replace方法和下标访问法。
setValue方法使用与QList一样,只能在Java风格的读写迭代器中使用。
五、QMap
5.1 添加元素
通过键值对的方式添加元素,不支持输出运算符进行添加元素,只能通过insert方法和[]运算符。
QMap<QString,QString> map; //创建QList对象
map.insert("001","map容器第1个元素");
map.insert("002","map容器第2个元素");
map["003"] = "map容器第3个元素";
5.2 遍历元素
- STL风格迭代器
读写迭代器
QMap<QString,QString>::iterator mapIt = map.begin();
for(; mapIt!=map.end(); mapIt++){
qDebug() << mapIt.key() << mapIt.value(); //打印map容器中的key和value
}
只读迭代器
QMap<QString,QString>::const_iterator mapIt_const = map.constBegin();
for(; mapIt_const!=map.constEnd(); mapIt_const++){
qDebug() << *mapIt_const; //打印map容器中的value
qDebug() << mapIt_const.key() << mapIt_const.value(); //打印map容器中的key和value
}
- java风格迭代器
读写迭代器
QMutableMapIterator<QString,QString> mMIt(map);
//从最后一个元素往前遍历
for(mMIt.toBack(); mMIt.hasPrevious();){
mMIt.previous();
qDebug() << mMIt.key() << mMIt.value();
}
只读迭代器
QMapIterator<QString,QString> itMap(map);
//从第一个元素往后遍历
for(itMap.toFront(); itMap.hasNext();){
itMap.next();
qDebug() << itMap.key() << itMap.value();
}
以上读写迭代器可以对元素进行修改/插入/删除,只读迭代器只能进行遍历。
5.3 寻找元素
- 通过key找value
map.value("002"); //寻找key="002"的元素,返回value
map["003"]; //通过下标查找key="003"的元素,返回value
//使用find方法,返回迭代器,这个只适用于STL风格的迭代器
QMap<QString,QString>::iterator mapIt2 = map.find("001");
qDebug() << "001是什么:" << mapIt2.value();
- 通过value找key
map.key("map容器第2个元素"); //寻找value="map容器第2个元素"的key
//使用findNext方法,返回布尔值,这个只适用于Java风格的迭代器
QMapIterator<QString,QString> itMap(map);
qDebug() << itMap.findNext("map容器第3个元素");
5.4 删除元素
- 删除指定key的元素
map.remove("001");
- 清空所有元素
map.clear();
5.5 修改元素
setValue方法,只能在Java风格的读写迭代器中使用,会对对应的value进行修改;
也可以使用下标方式更改内容:map["001"] = "更改第一个元素";
还可以通过.value方式更改元素内容,只适用于读写的迭代器。
QMap<QString,QString>::iterator mapIt = map.begin();
mapIt.value() = "";
六、QHash
6.1 添加元素
通过键值对的方式添加元素,不支持输出运算符进行添加元素,只能通过insert/insertMulti 方法和[]运算符。
QHash<int,QString> hash; //创建QList对象
hash.insert(101,"hash容器第1个元素");
hash.insert(102,"hash容器第2个元素");
hash[103] = "hash容器第3个元素";
hash.insertMulti(104,"hash容器第4个元素");
6.2 遍历元素
- STL风格迭代器
读写迭代器
QHash<int,QString>::iterator hashIt = hash.begin();
for(; hashIt!=hash.end(); hashIt++){
qDebug() << hashIt.key() << hashIt.value(); //打印hash容器中的key和value
}
只读迭代器
QHash<int,QString>::const_iterator hashIt_const = hash.constBegin();
for(; hashIt_const!=hash.constEnd(); hashIt_const++){
qDebug() << *hashIt_const; //打印hash容器中的value
qDebug() << hashIt_const.key() << hashIt_const.value(); //打印hash容器中的key和value
}
- java风格迭代器
读写迭代器
QMutableHashIterator<int,QString> mHIt(hash);
//从最后一个元素往前遍历
for(mHIt.toBack(); mHIt.hasPrevious();){
mHIt.previous();
qDebug() << mHIt.key() << mHIt.value();
}
只读迭代器
QHashIterator<int,QString> itHash(hash);
//从第一个元素往后遍历
for(itHash.toFront(); itHash.hasNext();){
itHash.next();
qDebug() << itHash.key() << itHash.value();
}
以上读写迭代器可以对元素进行修改/插入/删除,只读迭代器只能进行遍历。
6.3 寻找元素
- 通过key找value
hash.value(101); //寻找key="002"的元素,返回value
hash[102]; //通过下标查找key="003"的元素,返回value
//使用find方法,返回迭代器,这个只适用于STL风格的迭代器
QHash<int,QString>::iterator hashIt2 = hash.find(103);
qDebug() << "103是什么:" << hashIt2.value();
- 通过value找key
hash.key("hash容器第2个元素"); //寻找value="hash容器第2个元素"的key
//使用findNext方法,返回布尔值,这个只适用于Java风格的迭代器
QHashIterator<int,QString> itHash(hash);
qDebug() << itHash.findNext("hash容器第3个元素");
6.4 删除元素
- 删除指定key的元素
hash.remove("001");
- 清空所有元素
hash.clear();
6.5 修改元素
setValue方法,只能在Java风格的读写迭代器中使用,会对对应的value进行修改;
也可以使用下标方式更改内容:hash[101] = "更改第一个元素";
还可以通过.value方式更改元素内容,只适用于读写的迭代器。
QHash<int,QString>::iterator hashIt = hash.begin();
hashIt.value() = "";
与QMap相比,QHash插入的元素是无序排列的,QMap以key排序;但QHash 比QMap 的查询速度快