Qt学习笔记常用容器

主要说Qt的以下几种容器

1.QList<T>

2.QLinkedList<T>

3.Map<T>

和一些常用的容器方法的使用

qSort

qCopy

qFind

1.QList<T>泛型集合是最常用的一种容器

看一下它的常用 操作

添加删除和两个迭代器

QListIterator和QMutableListIterator
#include <QCoreApplication>
#include<QList>
#include<QDebug>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QList<int> listInt;

    //添加
    for(int i =0;i<10;i++)
    {
        listInt.append(i);
        //也可以这样添加元素
        //listInt<<i;
    }
    //删除
    qDebug()<<"删除3";
    listInt.removeAt(3);
    //查询
    foreach (int item, listInt) {
        qDebug()<<item;
    }

    qDebug()<<"Iterator";

    //迭代器
    QListIterator<int> iterator(listInt);
    while(iterator.hasNext())
    {

        qDebug()<<iterator.next();
        if(iterator.hasNext())
        qDebug()<<"the Next is :"<<iterator.peekNext();
    }
    //返转
    iterator.toBack();
    while(iterator.hasPrevious())
    {
        qDebug()<<iterator.previous();
    }
    qDebug()<<"可变迭代器QMutableListIterator";
    //可变的迭代器
    QMutableListIterator<int> mutableiterator(listInt);
    mutableiterator.insert(13);
    mutableiterator.insert(14);
    mutableiterator.insert(15);
    while(mutableiterator.hasNext())
    {
       int i=  mutableiterator.next();
       if(i==2||i==6)
       {
           mutableiterator.remove();
       }
    }

    //查询
    foreach (int item, listInt) {
        qDebug()<<item;
    }
    return a.exec();
}

 

2.QLinkedList<T> 

QLinkedList<T>和QList<T>差不多,不同的一点是它是用迭代器做的访问项

也就是说QList<int> list只以通过这样访问它的内容list[i]而QLinkedList不可以只能用Iterator

性能上它要高于QList<T>

#include <QCoreApplication>
#include<QLinkedList>
#include<QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QLinkedList<int> link;
    link<<1<<2<<2<<3<<4;
    qDebug()<<"迭代器访问QLinkedListIterator";
    QLinkedListIterator<int> iterator(link);
    while(iterator.hasNext())
    {
        qDebug()<< iterator.next();
    }
    //删除第一个2
    link.removeOne(2);
    //添加两个3这两种方式一样
    link.push_back(3);
    link.append(3);
    //删除所有的3
    link.removeAll(3);
    qDebug()<<"普通访问foreach";
    foreach (int item, link) {
        qDebug()<< item;
    }

    qDebug()<<"迭代器QMutableLinkedListIterator";
    QMutableLinkedListIterator<int> mutableIter(link);

    while(mutableIter.hasNext())
    {
        int i= mutableIter.next();
        if(i==1)
        {
            mutableIter.insert(90);
        }
        if(i==4)
        {
            mutableIter.remove();
        }
        qDebug()<<i;
    }
    qDebug()<<"迭代器QMutableLinkedListIterator重新访问";
    mutableIter.toFront();
    while(mutableIter.hasNext())
    {
        int i= mutableIter.next();
        qDebug()<<i;
    }
    //mutable
    return a.exec();
}
a

3Map<T>

map类型是一个键值对 key/value组成 其它的和上边的两个集合没什么区别 

#include <QCoreApplication>
#include<QMap>
#include<QDebug>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QMap<int,QString> map;
    map.insert(1,"a");
    map.insert(2,"b");
    map.insert(3,"c");
    QMutableMapIterator<int,QString> mutableIte(map);
    while(mutableIte.hasNext())
    {
        mutableIte.next();
        qDebug()<<mutableIte.key()<<" "<<mutableIte.value();
    }
    return a.exec();
}

 

下边说一下常用的集合操作方法

qSort

qCopy

qFind

#include <QCoreApplication>
#include<QList>
#include<QDebug>
#include<QVector>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QList<int> listStrs;
    listStrs<<10<<5<<8<<2<<7;
    qSort(listStrs);
    foreach (int i, listStrs) {
        qDebug()<<i;
    }
    qDebug()<<"____________________________";
    listStrs.clear();
    listStrs<<10<<5<<8<<2<<7;
    qSort(listStrs.begin()+1,listStrs.end()-1);
    foreach (int i, listStrs) {
        qDebug()<<i;
    }

    qDebug()<<"______________qCopy______________";
    QVector<int> newVec(5);
    qCopy(listStrs.begin(),listStrs.end(),newVec.begin());
    foreach (int i, newVec) {
        qDebug()<<i;
    }
    qDebug()<<"______________qFind______________";
    listStrs.clear();
    listStrs<<2<<5<<8<<2<<7;
    QList<int>::const_iterator iterFin=qFind(listStrs,2);
    if(iterFin!=listStrs.end())
    {
        qDebug()<<*iterFin;
    }
    else
    {
        qDebug()<<"notFound!";
    }
    return a.exec();
}

 

 

时间: 2024-10-11 08:02:22

Qt学习笔记常用容器的相关文章

Qt学习笔记 ListWidget的增删改

学习了一下ListWidget控件的使用,做一个小功能增删改 先把代码分解最后给出完整代码 在窗体上添加一个ListWidget 一个Horizontal Specer和  三个PushButton 效果如下 因为构造函数中的SetupUi(this)会自动将符合on_objectName_signalName()命名 的任意槽与相应的objectName的signalName()信号连接到一起 我就直接在.h文件里添加槽的声明  private slots: void on_btn_AddEv

【Qt编程】Qt学习笔记&amp;lt;三&amp;gt;

1.      如果程序中使用了png以外格式的图片,在发布程序时就要将Qt安装目录下plugins中的imagineformats文件复制到发布文件中. 2.      在函数声明处快速添加函数定义可单击函数名,按下alt+Enter键后,按下Enter键就可以进入到函数定义部分. 3.      关联槽和信号的两种方法:1.直接在设计器中用鼠标拖拽,适合于设计器中的部件间进行.2.在设计器中右击部件进入转到槽,这种方法是自动关联. 4.      我们在进行编程时,应注意:一个文件.一个类.

JavaScript学习笔记--常用的互动方法_javascript技巧

输出内容(document.write) document.write() 可用于直接向 HTML 输出流写内容.简单的说就是直接在网页中输出内容. 第一种:输出内容用""括起,直接输出""号内的内容. <script type="text/javascript"> document.write("I love JavaScript!"); //内容用""括起来,""里的内容

Qt 学习笔记 TreeWidget 增删改

在窗体上放一个TreeWidget控件和四个PushButton加一个Horizontal Spacer 布局如图 给树添加元素节点的方法和实现 .h文件 QTreeWidgetItem * AddTreeRoot(QString name,QString desc); QTreeWidgetItem * AddTreeNode(QTreeWidgetItem *parent,QString name,QString desc); .cpp文件 QTreeWidgetItem * TreeVie

Qt学习笔记 TableWidget使用说明和增删改操作的实现

看一下效果很简单的一个小功能 先说分部讲一下过程 再给出详细代码  添加数据 MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); ui->tableWidget->setColumnCount(2); ui->tableWidget->setRowCount(2); ui->tableWidget->se

Qt学习笔记 线程(一)

Qt中的线程是与平台无关的 QThread 提供了创建一个新线程的方法 新建一个线程,继承QThread并重写它的run()当调用 start()函数时会调用重载的run()函数 例: #ifndef MYTHREAD_H #define MYTHREAD_H #include <QThread> class MyThread : public QThread { Q_OBJECT public: bool stop ; explicit MyThread(QObject *parent =

Qt学习笔记网络(一)

Qt5 移除了QHttp是因为功能重复 用QNetworkAccessManager完全能搞定 新建一个控制台应用程序 看一下QNetworkAccessManager的帮助文档 需要添加Qt + =network 新建一个类 .h文件 #ifndef DOWNPAGES_H #define DOWNPAGES_H #include<QNetworkAccessManager> #include <QObject> class DownPages : public QObject

Qt学习笔记 QMessageBox

Qt的几种MessageBox 1.Infomation类型 QMessageBox::information(this,tr("hello"),tr("title")); 2.Question类型 QMessageBox::StandardButton returnBtn; returnBtn = QMessageBox::question(this,tr("hello have problem?"),tr("error!"

c/c++unix/linux基础学习笔记-常用命令和vi的使用

linux 基本命令的使用-命令在ubuntu下面执行,有些命令通用其他linux,有些不通用. 多条命令间用;号隔开,回车后可以一起执行. clear-前屏,pwd显示当前目录,cd跳转目录. sudo [命令]  -ubuntu 下以管理员身份运行命令. 一般情况下,运行当前目录下的程序,要用 ./文件名 执行. 查看当前shell名称:ps 进入另外一个shell,直接输入shell名称:ksh/tcsh/sh/bash,退出一个shell用:exit. 切换shell命令,如:exec