基于模板的容器类,更轻量,安全且容易使用,速度消耗和内联方面进行了优化

存储在Qt容器中的数据必须是可赋值的数据类型

Qt的QObject及其他的子类(QWidget,Qdialog)是不能够存储在容器中的,没有复制构造函数和赋值操作符

正确:QList<QToolBar*>list;

错误:QList<QToolBar>list;

Qt的容器类是可以嵌套的

QHash<QString,QList<double> >

后面的两个> >之间必须要有空格哦,否则就当成>>了

常用容器类

QList<T>

存储给定数据类型T的一列数值

列表追加,列表中间插入操作的函数

维护了一个指针数组,该数组存储的指针指向QList的列表项的内容,因此其提供了基于下表的快速访问

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    QList<QString> list;//声明了一个栈对象
    QString str("This is a test string");
    list<<str;//通过操作运算符<<将一个QString字符串存储在该列表中
    qDebug()<<list[0]<<"How are you!";
    w.show();
    return a.exec();
}

QLinkedList<T>

链式列表,以非连续的内存块保存数据

不能使用下标,只能使用迭代器访问他的数据项,在很大的列表进行插入操作时,能有更高的效率

QVector<T>

既可以使用下标,也可以使用迭代器访问数据项,继承的子类有QPolygon,QPolygonF和QStack

向后遍历的例子
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    QList<int> list;//创建了一个空的列表
    list<<1<<2<<3<<4<<5;//通过操作运算符<<将5个整数输入
    QListIterator<int> i(list);//以该list为参数初始化一个QListIterator对象i
    for(;i.hasNext();)//调用QListIterator<T>::hasNext()函数检查当前迭代点之后是否有列表项
    qDebug()<<i.next();//调用QListIterator<T>::next()函数进行遍历
    w.show();

    return a.exec();
}
向前遍历用的函数

镇魂歌~Qt5容器类_1


QMutableListIterator<T>读写迭代器,insert(),remove()

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    QList<int> list;//创建了一个空的列表
   // list<<1<<2<<3<<4<<5;//通过操作运算符<<将5个整数输入
    QMutableListIterator<int> i(list);//以该list为参数初始化一个QListIterator对象i
    for(int j=0;j<10;j++)
        i.insert(j);

    for(i.toFront();i.hasNext();)
    qDebug()<<i.next();
    for(i.toBack();i.hasPrevious();)
    {
        if(i.previous()%2==0)
            i.remove();
        else
            i.setValue(i.peekNext()*10);
    }
    for(i.toFront();i.hasNext();)
        qDebug()<<i.next();

    w.show();

    return a.exec();
}
镇魂歌~Qt5容器类_1

STL风格迭代器

镇魂歌~Qt5容器类_1

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    QList<int> list;//创建了一个空的列表
   for(int j=0;j<10;j++)
       list.insert(list.end(),j);
   QList<int>::iterator i;
   for(i=list.begin();i!=list.end();++i)
   {
       qDebug()<<(*i);
       *i=(*i)*10;
   }
   QList<int>::const_iterator ci;
   for(ci = list.constBegin();ci!=list.constEnd();++ci)
       qDebug()<<*ci;
    w.show();

    return a.exec();
}
镇魂歌~Qt5容器类_1

相关文章: