QList和QVector的一些基本用法

Deadly 提交于 2019-12-11 17:03:07

 

QList和QVector基本用法一样

QList<T> list 和QList<T*>list

T可以是数据类型或者指针(类指针)

定义一个数据结构体

typedef struct student

{

    int id;

    QString name;

    QString sex;

    int age;

    QString des;

 

}student;

 

或者定义一个类

class Facility : public QObject

{

    Q_OBJECT

public:

    explicit Facility(QObject *parent = nullptr);

    QString name;

signals:

public slots:

}

 

1、创建QList

(1)T为非指针的数据结构

QList<student> SList;
    //非指针
    for (int i=0;i<10;i++) {
       student s1;
       s1.id=i;
       s1.name = "哇哈哈"+tr("%1").arg(i);
       s1.age=10+i;
       SList.append(s1);

 }

(2) T为指针类型

QList<Facility *> flist;
  Facility *P = new Facility();
  P->name = "哈哈哈";
  flist.push_back(P);
  Facility *P1 = new Facility();
  P1->name = "大神把";
flist.push_back(P1);

2、添加、插入

void append(const T&value)     在QList尾部插入value

 void append(const TQList<T>&value)       在QList尾部插入QList<T>&value

void insert ( int i, const T & value )      在QList其中某个位置插入value,假如没 声明i ,i 默认size()及在最后插入value

 iterator insert ( iterator before, const T & value )    在迭代器的前个位置插入value并返回当前迭代器的位置

3、修改值

QList.at(i) 不能修改值

(1)、可以用下标修改值,然后replace

for (int i=0;i<SList.size();i++) {
        if (SList[i].id%2) {
            SList[i].id=SList[i].id*-1;
            SList.replace(i,SList[i]);
        }

    }

(2)、用迭代器修改值

QList<student *>::iterator i;
   for (i = SList.begin();i!=SList.end();) {
       if ((*i)->id%2) {
           (*i)->id=(*i)->id*(-1);
       }
       ++i;
   }

4、删除item (一般使用迭代器)

注意内存泄露

不要在foreach里面进行元素的remove/add操作,remove请使用Iterator方式

(1)T非指针,直接removeOne或erase 全部删除用clear

(2)指针类型的,必须先delete *i 然后removeOne或erase

全部删除QList先删除指针内存再删除item 可以使用qDeleteAll(flist);flist.clear();
使用迭代器删除item时注意下标
QList<Facility *>::iterator i=flist.begin();
    for (;i!=flist.end();++i) {
      if ((*i)->name.contains("大")) {
         (*i)->name = (*i)->name.replace("大","小");         
          delete *i//指针需要删除内存
          flist.removeOne(*i);
        //  flist.erase(i);
          i--;  // 注意i的位置要回退一位
      }
  }

5、排序

使用qSort函数

bool compareData(const student &infoA, const student &infoB)
{
    return infoA.id < infoB.id;

}

 

qSort(SList.begin(),SList.end(),compareData);//按id排序

 

或者冒泡排序

//冒泡排序

    for (int i=0;i<SList.size();i++) {

        for (int j=i+1;j<SList.size();j++) {

            if (SList[j].id>SList[i].id)//互换

            {

                student temp;

                temp = SList[i];

                SList[i]=SList[j];

                SList[j]=temp;

            }

        }

    }

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!