QT:07---数据结构(QList、QLinkedList、QVector、 QMap、QHash)、常用算法

迭代器

QT支持两种类型的迭代器

  • 只读迭代器:const_iterator
  • 读写迭代器:iterator

只读迭代器比读写迭代器操作速度快很多

QT:07---数据结构(QList、QLinkedList、QVector、 QMap、QHash)、常用算法_第1张图片

一、QList

概念:是一个提供列表的模板类

//函数:
insert();  //指定索引处插入值
replace(); //指定索引处替换值
append();  //尾追
prepend(); //头追
at():  //得到索引索引的值
count(); //返回某元素的个数
contains();//判断是否包含某元素。返回值:布尔值
swap();  //交换两个索引对应的值,参数:1.索引1 2.索引2
indexOf(); //得到参数1对应元素的索引,参数2:从哪里开始查找(可缺省)

removeAt();  //移除索引处值
removeFirst();//移除第一个元素
removeLat();  //移除最后一个元素
removeAll();  //移除参数中对应的元素(删除全部)
remove();  //移动元素。参数:1.起始索引 2.目标索引处
//将元素从起始索引移到目标索引处,其它元素跟着相应变化(向前或前后)

takeAt(); //移除索引对应的元素并得到这个元素
takeFirst();
takeLast();

①常见操作

可以通过<<添加元素

QList list;
list<<1<<2<<3<<4<<5;

②遍历元素

使用forforeach迭代器

QList list;
QList::const_iterator ite; //定义一个只读迭代器
list<<1<<2<<3<<4<<5;
for(ite=list.begin();ite!=list.end();++ite)
{
    qDebug()<<(*ite);
}

foreach (int item, list)
{
    qDebug()<

二、QLinkedList

概念:是一个提供链接列表的模板类

三、QVector

概念:是一个提供动态数组的模板类

四、QMap

概念:提供了一个基于跳跃列表的字典

//函数:
insert(); //插入元素(推荐使用)。参数:1.key 2.value
value(); //通过Key值v获得value,不存在返回0
take();  //删除一个key,并获得这个key对应的值
clear(); //清除所有元素
contains(); //判断对应的key值是否存在,返回:布尔值

①常见操作

使用[]去取一个key对应的值时,如果这个key不存在,则返回0、NULL...等(依据类型而定),并添加这个key值

QMap map;
map["one"] = 1;
int value1 = map["two"];
qDebug()<< value1; //返回0,two已经添加进map中

②遍历元素

通过迭代器foreach

QMap map;
QMap::const_iterator ite;
map.insert("one",1);
map.insert("two",2);
for(ite=map.constBegin();ite!=map.constEnd();++ite)
{
    qDebug()<

五、QHash

概念:一个模板类,它提供基于哈希表的字典

QMap与QHash的差别:

  • QHash具有比QMap更快的查找速度  
  • QHash以任意的顺序存储数据项,而QMap总是按照键Key顺序存储数据

 

容器常用算法

一、qSort

排序,默认为升序,第二个参数:qGreater()逆序

QList list;
list << 36 << 16 << 66 << 6 << 56;
qSort(list.begin(), list.end());  //升序
qSort(list.begin(), list.end(),qGreater()); //逆序

二、qCopy

拷贝,要注意有足够的空间存储拷贝内容

QStringList list;
list << "a" << "b" << "c";
QVector vect(5);
qCopy(list.begin(), list.end(), vect.begin()+1);
foreach (QString item, vect)
{
    qDebug() << item;
}
//vect:["","a","b","c",""]

三、查找(qFind、find)

QList查找,qFinf

QList List;
List << 1 << 5 << 15 << 25;
QList::const_iterator Iter = qFind(List.begin(), List.end(), 25);
if(Iter != List.end())
{
    qDebug() << "Find: " << *Iter;
}
else
{
    qDebug() << "Not Find";
}

QMap查找,find只能找到其key值,而不是value值

QMap map;
map.insert(1,"a");
map.insert(2,"b");
QMap::const_iterator Iter=map.find(1);
while(Iter!=map.end()&&Iter.key()==1)
{
    qDebug()<

 

你可能感兴趣的:(QT编程)