C++中关于效率的讨论(一)

date 218/04/26  by  WJB

接触C++将近一年了,自己一直在用心学习,但是总感觉自己的知识储备太少了,心里没有关于架构的观念,效率也不考虑,功能只要实现了感觉就完成任务了。而效率是开发的关键,我总在抱怨语言限制,认真想象还是自己技术不到家,接下来和大家讨论一些关于效率的问题。

 今天首先说一下Vecor和list

  vector实质是个数组,内存是连续的,所以vector在储存时只需要挨个放置就可以了,而list是一个链表,内存不连续,存放数据需要先关联前一个数据,这样花费了更多的时间。用事实说话,代码测试,为了简单我使用了QT;

首先在头文件声明两个对象和一个方法(写代码时记得包含相应的头文件)

void generateData();

QVector<QPointF> m_Vector_Data;

QList<QPointF>  m_List_Data;

在CPP文件中实现generateData方法,同时打印运行时间

void generateData()
{
QTime time1;
time1.start();
for (int i = 0; i < 1000; i++)
{
for (size_t j = 0; j < 10000; j++)
{
QPointF point(i,j);
m_Vector_Data.push_back(point);
}
}

qDebug() << "time1" << time1.elapsed();

QTime time2;
time2.start();
for (int i = 0; i < 1000; i++)
{
for (size_t j = 0; j < 10000; j++)
{
QPointF point(i, j);
m_List_Data.push_back(point);
}
}

qDebug() << "time2" << time2.elapsed();
QTime time3;
time3.start();
m_List_Data.toVector();
qDebug() << "time3" << time3.elapsed();
}

//////////////////////////////////////////////////////////////////////////////

一千万数据量的测试 如果去掉m_Vector_Data.push_back(point)和m_List_Data.push_back(point)这两句两个循环时间时一样的

time1 51
time2 51

time3 0

一千万的循环51毫秒 速度还是可以的,我的电脑时固态硬盘,i7处理器,这个时间肯定和电脑配置有关系的。

添加两句代码运行的结果为

time1 661
time2 2180
time3 795

纳尼!!!!!!!!!!!!!三倍还要多 不要滥用 tovector(), 很浪费时间的。

今天先到这里,希望大家提出更好的建议。

转载请表明出处。

猜你喜欢

转载自blog.csdn.net/wangjianbo09/article/details/80100754