当前位置: 代码迷 >> 综合 >> Qt容器类-QList+QMap
  详细解决方案

Qt容器类-QList+QMap

热度:95   发布时间:2023-12-12 17:54:51.0

概念

  • Qt容器支持可以赋值的数据类型,这种类型的数据必须提供
    • public 拷贝构造函数
    • public 构造函数
    • 赋值操作运算符重载(必要时提供)
  • QObject及其子类(无拷贝构造函数和赋值运算符重载)不能够存放在容器中;除非手动添加这些方法,但是可以存放QObject及其子类的指针类型数据。
  • 容器类支持嵌套使用,但符号需要加空格,如“> >”,不加空格会和">>"输出/输入重复,造成编译错误。

List支持的容器类

List遍历-java风格

说明:

  • 效率比STL方式要低。
  • 只读迭代比读写迭代效率要高。
  • QLinkedList不支持下标访问。

void DataObject::testList1()
{QList<int> list;list<<1<<2<<3<<4;QListIterator<int> it(list);while(it.hasNext()){qDebug()<<it.next();}
}

List遍历-STL分格

说明:

  • STL遍历方式效率高
  • 只读迭代比读写迭代效率要高

void DataObject::testList2()
{QList<int> list;for(int i=0; i<10; i++){list.append(i);}QList<int>::const_iterator it;for(it=list.begin(); it!=list.end(); it++){qDebug()<<"value ="<<*it;}
}

Map类

Map类遍历-java风格

说明:

  • 只读迭代比读写迭代效率要高

void DataObject::testMap1()
{QMap<QString, QString> map;map.insert("1", "111");map.insert("2", "222");map.insert("3", "333");QMapIterator<QString, QString>it(map);//注意:获取key和value的方法不一样while (it.hasNext()) {qDebug()<<"key= "<<it.key()<<", value="<<it.next().value();}
}

Map类遍历-STL风格

说明:

  • 只读迭代比读写迭代效率要高

void DataObject::testMap2()
{QMap<QString, QString> map;map.insert("1", "111");map.insert("2", "222");map.insert("3", "333");QMap<QString, QString>::const_iterator it;for(it=map.constBegin(); it!=map.constEnd(); it++){qDebug()<<"key= "<<it.key()<<", value="<<it.value();}
}

使用要点

  • 集合中最好不要使用中文,会有异常,且不容易国际化。
  • 集合直接进行比较没有意义(关键是集合中数据的比较)。