概念
- 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();}
}
使用要点
- 集合中最好不要使用中文,会有异常,且不容易国际化。
- 集合直接进行比较没有意义(关键是集合中数据的比较)。