1、容器的概念
用于存储给定的数据类型的值,它是模板类,更具提供T的不同存储不同数据。
连续容器:QVector<T>,QLinkedList<T>,QList<T>
关联容器:QMap<K,T>,QHash<K,T>
2、Qt提供两个关联容器类:
QMap<key,value> QHash<key,value>
关联容器可以存储任意多个相同类型的数据,并且有一个键值索引,通过键值来读取数据。它以升序键的方式来存储数据。
- QMap
QMap<int,string> map;
//插入数据
map.insert(1,"ZhangSan");
map.insert(2,"LiSi");
map[3]="WangWu";//map[key]="value";//读数据
string temp;
temp = map.value(1);//temp = map.value(key)
temp = map[1]; //temp = map[key]
//返回所以key的列表
QList<T> keylist = map.keys();
3、连续容器:QVector<T>,QList<T>
- QVector
Qt的QObject类及其子类不能存放在容器中,QVector<T>和C++的数组几乎差不多,区别在于QVector<T>的大小可以重新定义。
(1)指定大小
QVector<int> vect(3);
vect[0] = 1;//通过下标赋值
(2)不指定大小
QVector<int> vect;
vect.append(1);//append方法在末端赋值
vect<<1<<2<<3;//使用<<操作符代替append
(3)初始化
普通的数据或指针初始化为0,"类"会调用默认构造函数初始化。
(4)fill函数
vect.fill(1,10);//容器填充全部1,大小为10
vect.fill(2);//容器全部填充为2,容器大小不改变
(5)at()只读查看
vect.at(2);//查看容器第三项
(6)data() //返回容器中第一项的指针
(7)indexOf(T,int from=0) //查看从指定位置开始的某一项T的位置
(8)contains(T) 查看是否包含某一项
(9)count(T)查看某一项被包含多少次
(10)count()查看容器大小==size()
(11)resuze(num)重置容器大小
(12)修改数据
insert(int i,T);//在指定位置i插入数据
replace(int i,T);//在指定位置i替换数据
prepend(T);//头部增加
append(T);//尾部增加
QVector<QString> vect;
vect.fill("hello",3);
if(vect.at(1)=="hello")
{qDebug<<"Yes";
}
vect.insert(2,"world);
- QLinkedList
QLinkedList<T>以链表的形势存储数据,是非连续的。在它中间插入数据比QVector容易很多,但是它不能用下标去访问数据,只能用迭代器。
- QList
兼容QLinkedList<T>和QVector<T>的优点,是一个“数组列表”。它既可以通过下标快速访问,QList在数组不大情况下,也很容易在中间插入数据。
QList维护的是一个数组指针,不是一个数组。
3、熟悉一些类型
- QString
QString str = "hello";
str += " world";
//追加
str.appeng("\n");
//移除两端的空白
trimed(str);//移除两端的空白
//组合字符串
str.sprintf("%s%s%s","hello","world"."\n");//格式化的输出打印到字符串中
str=QString(%1%3%2).arg("I").arg("you"),arg("love");//占位符QByteArray 主要存储原始的二进制数或者8位编码的文本,