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;
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM