QList 和QVector的区别
QList不同于List,QList 是基于数组+链表,即各个节点的 指针不是通过Next来指向,而是通过将各节点的指针存放在一个数组中,遍历通过找到数组中的指向该节点的指针,在通过指针将节点找到,所以QList的效率应该是同QVector差不多,只是多了一个通过指针查找节点的过程。
QVector同vector一样是一段连续的内存。
QVector 的优缺点
QVector针对不改变的对象,即只要求查询,不做插入删除等操作效率高,但是由于自身结构的原因,插入删除甚至包括追加等操作的效率会比QLIst低,
例如:
当执行插入操作时,如果是插入在中间,那么从插入位置之后的元素都会被影响,如果是插在第一个位置,那么所有的元素都会受影响,即所有元素都会后移,之前的迭代器都将失效,删除同理,至于追加,则是可能会效率低,原因在于,当QVector开始是申请的一段内存正好已经用完,此时进行添加的话,系统会重新分配一块更大的内存,并将现有的元素拷贝到新的内存中,这样效率自然就低了。
QList的优缺点
对比,QVector,QList的优点就很显而易见了,分散存储,并且查找效率也不会低。
针对网上说的,QList可能会造成堆栈溢出导致崩溃,实际测了一下,
QList<int> m_num;
int i = 0;
for(; ; i++)
{
try
{
m_num<<5020;
}
catch(...)
{
qDebug()<<"00000000000000000";
qDebug()<<i*8/1024/1024;
break;
}
}
//m_num.clear();
qDebug()<<i;
--------------
结果:
Qt 推荐,如果不是明确要求使用连续的内存空间,请选择QList而非QVector.
先写到这。