只要是数据就必须使用容器,程序中容器中的数据更方便增删改查
Qt中提供了一组通用的基于模板的容器类(container class)。可以用来存储指定的项目(items),如QVector(QString),与STL(C++标准模板库)相比,Qt中的容器更轻量,更安全,耿荣翻译使用
STL迭代器的API是以数组中的指针为模型的。例如,++操作符将迭代器向前推进到下一个项目,*操作符返回迭代器指向的项目。
注意:STL风格的迭代器指向项目中的,其中容器的begin()函数返回的是指向该容器的第一个项目的迭代器,end()函数返回的也是一个迭代器,但是时最后一个项目的写一个项目的虚假项目,end()表示的是一个无效的位置
当列表为空时,begin()函数等价于end();
QListlist;
list<<"hello"<<"my"<<"life";
QList::iterator i; //定义一个读写迭代器
for(i=list.begin();i::ConstIterator j;//只读迭代器
for(j=list.constBegin();j!=list.constEnd();++j)
{
qDebug()<<*j;
}
结果:
list.size();//获取大小
list.insert(3,"ll");
list.replace(3,"me");
list.removeAt(3);//移除操作
list.move(2,1);
list.swap(2,3);//交换
list.append("sda");
list.prepend("ssad");
list.removeFirst();
list.removeLast();
list.takeAt(2);//从项目中删除该项并且获得该项的值
list.takeFirst();
list.takeLast();
list.indexOf("e",3);//获取一个项目的索引
list.contains("sa");//是否包含相应的项目
list.count("ss");//出现的次数
list可以用"<<"来向插入值,也可以用 []来进行索引访问,下标从0开始,对于只读可以用at()函数
基于迭代器访问的 List,方便快速插入,删除
foreach (var, container) {
}
QLinkedListlist;
list<<1<<2<<4;
foreach (int i, list) {
qDebug()<
QVector又叫可变向量,可变数组
QMap类是一个模板类,它提供了一个基于红黑树的字典。
QMap
QMap和QHash提供了非常类似的功能。的差异是:
QMapmap;//QMap是按照键来有序存放的
map["one"]=1;
map["two"]=2;
map["three"]=3;
map.insert("seven",7);
//获取键值的时候,使用“[]”操作符时,如果map中没有该键,会自动插入该键值对
int value=map["six"];
qDebug()<::const_iterator it;
for(it=map.constBegin();it!=map.constEnd();++it)
{
qDebug()<<*it;
}
----------------------------------------
QMap::const_iterator it=map.begin();
while(it!=map.end())
{
std::cout<<*it;
++it;
}
Qmap和QHash的差别
QHashem;
em.insert(1,"Bob");
em.insert(2,"mary");
foreach (int i, em.keys()) {
qDebug()<::const_iterator it;
for (it = em.begin(); it != em.end(); ++it)
qDebug() << it.key() << ": " << it.value();
在头文件中,Qt提供了一些全局的模板函数,这些函数可以使用在容器中的常用算法,我们可以在任何提供了STL风格的迭代器的容器类中使用这些算法,包括QList、 QLinkedList、QVector、QMap、QHash.
//利用map的原理来进行排序
QStringList list;
list << "AlPha" << "beTA" << "gamma" << "DELTA";
QMap map;
foreach (const QString &str, list)
map.insert(str.toLower(), str);
list = map.values();
qDebug() < list;
list << 33 << 12 << 68 << 6 << 12;
qSort(list.begin(), list.end(), qGreater());
QStringList list;
list<<"a"<<"b"<<"c";
QVectorvect(3);
QVectorvect2(8);
qCopy(list.begin(),list.end(),vect.begin());
qCopy(list.begin(),list.end(),vect2.begin()+3);
foreach (QString item, vect) {
qDebug()<
QVectorvect(5);
qFill(vect.begin()+1,vect.end()-2,"PUBG");
foreach (QString item, vect) {
qDebug()<
-------------在QList中的使用-------------
QListlist;
list<<1<<2<<5<<25;
QList::const_iterator i=qFind(list.begin(),list.end(),25);
if(i !=list.end())
{
qDebug()<<"找得到了";
}
else
{
qDebug()<<"没找到";
}
---------------在QMap中的使用-------------
QMapem;
em.insert("c++","bob");
em.insert("win32","xiaqi");
em.insert("mfc","xiaolan");
em["linux"]="laowang";
QMap::iterator i=em.find("linux");
//在map中find只能find其key 不能是value
while(i!=em.end()&&i.key()=="linux")
{
qDebug()<