QList和QVector速度比较

前言

测试QList和QVector的数据插入和删除的速度。

代码如下(示例):

//以函数对象的形式定义查找规则--升序--MftNumber
class ascendingOrder {
public:
    bool operator()(const int& i, const int& j) {
        return i < j;

    }

};
//快速查找
/*
 * 查找列表中不小于数据查找到返回当前位置的迭代器,否则返回大于迭代器的第一个位置。
 *  前提是排序好的列表,算法采用的是折半查找。
 */
template<class ForwardIterator, class T, class Compare>
 QPair<ForwardIterator,ForwardIterator> quickFind(ForwardIterator first, ForwardIterator last, const T& val, Compare comp)
{
    ForwardIterator it = qLowerBound (first,last,val,comp);
    return qMakePair ( it, qUpperBound(it,last,val,comp) );
}
int main(int argc, char *argv[])
{
	
	    int ttt= 100000;//测试100000个数据

    QTime t;
    t.start();
    QList<int> list;
    for(int i=0;i<ttt;i++)
    {
        list.append(i);
    }
    qDebug()<<"list:"<<t.restart();
    for(int i=0;i<ttt;i++)
    {
        QPair<QList<int>::iterator,QList<int>::iterator> j = quickFind(list.begin(),list.end(),list.at(i),ascendingOrder());
        quint64 pos =  j.first - list.begin();//获取插入点
        list.insert(pos,i);
    }
    qDebug()<<"list插入:"<<t.restart();
    for(int i=0;i<ttt;i++)
    {
        QPair<QList<int>::iterator,QList<int>::iterator> j = quickFind(list.begin(),list.end(),list.at(i),ascendingOrder());
        quint64 pos =  j.first - list.begin();//获取插入点
        list.removeAt(pos);
    }
    qDebug()<<"list刪除:"<<t.restart();


    QVector<int> vector;
    for(int i=0;i<ttt;i++)
    {
        vector.append(i);
    }
    qDebug()<<"vector:"<<t.restart();
    for(int i=0;i<ttt;i++)
    {
        QPair<QVector<int>::iterator,QVector<int>::iterator> j = quickFind(vector.begin(),vector.end(),vector.at(i),ascendingOrder());
        quint64 pos =  j.first - vector.begin();//获取插入点
        vector.insert(pos,i);
    }
    qDebug()<<"vector插入:"<<t.restart();

    for(int i=0;i<ttt;i++)
    {
        QPair<QVector<int>::iterator,QVector<int>::iterator> j = quickFind(vector.begin(),vector.end(),vector.at(i),ascendingOrder());
        quint64 pos =  j.first - vector.begin();//获取插入点
        vector.removeAt(pos);
    }
    qDebug()<<"vector刪除:"<<t.restart();
    list.clear();
    for(int i=0;i<ttt;i++)
    {
        list.append(i);
    }
    qDebug()<<"list:"<<t.restart();
    for(int i=0;i<ttt;i++)
    {
        QPair<QList<int>::iterator,QList<int>::iterator> j = quickFind(list.begin(),list.end(),list.at(i),ascendingOrder());
        //quint64 pos =  j.first - list.begin();//获取插入点
        list.insert(j.second,i);
    }
    qDebug()<<"list迭代器插入:"<<t.restart();
    for(int i=0;i<ttt;i++)
    {
        QPair<QList<int>::iterator,QList<int>::iterator> j = quickFind(list.begin(),list.end(),list.at(i),ascendingOrder());
        //quint64 pos =  j.first - list.begin();//获取插入点
        list.erase(j.first);
    }
    qDebug()<<"list迭代器刪除:"<<t.restart();
    vector.clear();
    for(int i=0;i<ttt;i++)
    {
        vector.append(i);
    }
    qDebug()<<"vector:"<<t.restart();
    for(int i=0;i<ttt;i++)
    {
        QPair<QVector<int>::iterator,QVector<int>::iterator> j = quickFind(vector.begin(),vector.end(),vector.at(i),ascendingOrder());
        //quint64 pos =  j.first - vector.begin();//获取插入点
        vector.insert(j.second,i);
    }
    qDebug()<<"vector迭代器插入:"<<t.restart();

    for(int i=0;i<ttt;i++)
    {
        QPair<QVector<int>::iterator,QVector<int>::iterator> j = quickFind(vector.begin(),vector.end(),vector.at(i),ascendingOrder());
        //quint64 pos =  j.first - vector.begin();//获取插入点
        vector.erase(j.first);
    }
    qDebug()<<"vector迭代器刪除:"<<t.restart();




    return 0;
}

list: 2
list插入: 65
list刪除: 57
vector: 2
vector插入: 4587
vector刪除: 338
list: 3
list迭代器插入: 3322
list迭代器刪除: 772
vector: 2
vector迭代器插入: 3296
vector迭代器刪除: 667

总结:append();追加速度vector快一些;从中间插入或删除QList比QVector快7-8倍。
范围删除用:list.erase(list.begin(),list.begin()+10000);//速度是瞬间的

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值