Qt-在Qt中std::vector使用简介

相关资料:

https://blog.csdn.net/tpriwwq/article/details/80609371

实例:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QDebug>

#include <vector>// 使用vector,需添加头文件
#include <algorithm>// 要使用sort或find

using namespace std;

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

  

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    // 定义
    std::vector<int> nNullVec;// 空对象
    std::vector<int> nVec1(5, -1);// 包含10个元素,且值为-1
    std::vector<std::string> strVec{"a", "b", "c"};// 列表初始化
    for(size_t i = 0; i < nNullVec.size(); ++i)
         qDebug() << "nNullVec:" << nNullVec[i];// 什么也不输出
    for(size_t i = 0; i < nVec1.size(); ++i)
         qDebug() << "nVec1:" << nVec1[i];// -1-1-1-1-1
    for(size_t i = 0; i < strVec.size(); ++i)
         qDebug() << "strVec:" << QString::fromStdString(strVec[i]);// 输出"a""b""c"
    // 压入元素
    nVec1.push_back(5);
    nVec1.push_back(6);
    for(size_t i = 0; i < nVec1.size(); ++i)
         qDebug() << "nVec1:" << nVec1[i];// 输出-1-1-1-1-1 5 6
    // 判空处理
    qDebug() << "nNullVec:" << nNullVec.empty();// 输出true
    qDebug() << "empty:" << nVec1.empty();// 输出false
    // 迭代器 iterator 和 const_iterator。区别后者类似于常量指针,只能读取不能修改。vector对象不是常量,两者均可使用
    std::vector<int>::iterator itr = nVec1.begin();
      for(; itr != nVec1.end(); ++itr)
        qDebug() << "nVec1:" << (*itr);// 输出-1-1-1-1-1 5 6
    // 插入元素(TNND,插入还需要迭代器!)
    qDebug() << "insert========================";
//    c.insert(pos,num);    // 在pos位置插入元素num
//    c.insert(pos,n,num);   // 在pos位置插入n个元素num
//    c.insert(pos,beg,end);  // 在pos位置插入区间为[beg,end)的元素
    std::vector<int>::iterator insertItr = nVec1.begin();
    int index = 0;
    while(insertItr != nVec1.end())
    {
        if(2 == index)
        {
            insertItr = nVec1.insert(insertItr , 8); //此时insert的返回值是迭代器,插入成功后iVector指向插入的位置
        }
        index++;
        ++insertItr;
    }
    for(size_t i = 0; i < nVec1.size(); ++i)
         qDebug() << "nVec1:" << nVec1[i];// 输出-1-1 8-1-1-1 5 6
    // 删除元素(注意,删除元素,会导致迭代器无效)
    qDebug() << "delete========================";
//    c.erase(p);// 删除迭代器p所指定的元素,返回一个指向被删除元素之后的迭代器。
//    c.erase(begin,end);// 删除b,e所指定范围内的元素,返回一个指向被删除元素之后的迭代器。
//    c.clear();// 删除所有元素
    std::vector<int>::iterator deleteIter = nVec1.begin();
    for(; deleteIter != nVec1.end();)
    {
        if(*deleteIter == -1)
            deleteIter = nVec1.erase(deleteIter);
        else
            deleteIter++;
    }
    for(size_t i = 0; i < nVec1.size(); ++i)
         qDebug() << "nVec1:" << nVec1[i];// 输出 8 5 6
    // 清空元素
    qDebug() << "clear========================";
    nVec1.clear();
    for(size_t i = 0; i < nVec1.size(); ++i)
         qDebug() << "nVec1:" << nVec1[i];// 什么也不输出
}

MainWindow::~MainWindow()
{
    delete ui;
}

  

posted on 2021-11-15 14:58  疯狂delphi  阅读(1408)  评论(0编辑  收藏  举报

导航