访问vector元素方法的效率比较(转)
LInux下:
gcc 4.47,red hat6
#include<iostream>
#include<vector>
#include<time.h>
using namespace std; int main() {
//建立4个vector,使用列表初始化,相当与调用拷贝构造函数
vector<int> v1;
int temp;
int i;
for (i = ; i < ; ++i) {
v1.push_back(i);
}
//测试1
clock_t start,end;
start= clock();
for (i = ; i < v1.size(); ++i) {
temp=v1[i];
}
end = clock();
cout << "使用[]运算符耗时:" << (double)(end - start)/CLOCKS_PER_SEC << "s" << endl;
//测试2
start = clock();
for (auto k = v1.begin(); k < v1.end(); ++k)
{
temp = *k;
}
end = clock();
cout << "使用迭代器(++k)耗时:" << (double)(end - start)/CLOCKS_PER_SEC << "s" << endl; //测试3
start = clock(); for (auto k = v1.begin(); k < v1.end(); k++)
{
temp = *k;
}
end = clock();
cout << "使用迭代器,使用k++,而不是++k:" << (double)(end - start)/CLOCKS_PER_SEC << "s" << endl; //测试4
start = clock();
i = ;
for (auto k = v1.begin(); i<v1.size(); ++i,++k)
{
temp = *k;
}
end = clock();
cout << "使用迭代器,不使用end()方法:" << (double)(end - start)/CLOCKS_PER_SEC << "s" << endl; return ;
}

结论:使用[]运算符及size访问最快。
windows下:
vs2015中测试:
#include<iostream>
#include<vector>
#include<windows.h>
using namespace std; int main() {
//建立4个vector,使用列表初始化,相当与调用拷贝构造函数
vector<int> v1;
int temp;
int i;
for (i = ; i < ; ++i) {
v1.push_back(i);
}
//测试1
DWORD start,end;
start= GetTickCount();
for (i = ; i < v1.size(); ++i) {
temp=v1[i];
}
end = GetTickCount();
cout << "使用[]运算符耗时:" << end - start << "ms" << endl;
//测试2
start = GetTickCount();
for (auto k = v1.begin(); k < v1.end(); ++k)
{
temp = *k;
}
end = GetTickCount();
cout << "使用迭代器(++k)耗时:" << end - start << "ms" << endl; //测试3
start = GetTickCount(); for (auto k = v1.begin(); k < v1.end(); k++)
{
temp = *k;
}
end = GetTickCount();
cout << "使用迭代器,使用k++,而不是++k:" << end - start << "ms" << endl; //测试4
start = GetTickCount();
i = ;
for (auto k = v1.begin(); i<v1.size(); ++i,++k)
{
temp = *k;
}
end = GetTickCount();
cout << "使用迭代器,不使用end()方法:" << end - start << "ms" << endl; system("pause");
return ;
}
输出:
OK,从分析结果:
当然,如我们只是单纯的从前面两个结果来看,你会发现使用下标运算符的效率会比使用迭代器高一些。其实主要是在访问迭代器是要进行迭代器越位、有效性、是否指向同一容器等方面的判断,比较耗时。我们会发现测试4就是验证我我们的假设,因为执行end()函数是比较耗时的,所以我就不用它,发现迭代器访问会比下标还快。除了这些差别外,我们比较测试2和测试3的结果,会发现测试3比测试2慢了两倍,其实这个也就是为啥我们推荐在写:++k和k++的时候,能用++k,就用++k的原因。
结论:end()函数比较耗时,最好不用。去除end函数耗时,使用迭代器访问比下标快。k++比++k慢很多。
转自:http://blog.csdn.net/qq_35644234/article/details/53195331
访问vector元素方法的效率比较(转)的更多相关文章
- StrBlobPtr类——weak_ptr访问vector元素
#include <iostream> #include <memory> #include <string> #include <initializer_l ...
- OpenCV探索之路(十七):Mat和IplImage访问像素的方法总结
在opencv的编程中,遍历访问图像元素是经常遇到的操作,掌握其方法非常重要,无论是Mat类的像素访问,还是IplImage结构体的访问的方法,都必须扎实掌握,毕竟,图像处理本质上就是对像素的各种操作 ...
- c++ vector(向量)使用方法详解(顺序访问vector的多种方式)
来源:http://www.jb51.net/article/44231.htm 作者: 字体:[增加 减小] 类型:转载 时间:2013-12-08我要评论 vector是向量类型,它可以容纳许多类 ...
- struts2 访问Web元素的4种方法
完整代码 :Struts12AccessWebElement.rar 第一种也是最常用的一种方法实现这几个接口 RequestAware,SessionAware,ApplicationAware s ...
- 【总集】C++ STL类库 vector 使用方法
介绍: 1.vector 的中文名为向量,可以理解为一个序列容器,里面存放的是相同的数据结构类型,类似于数组但与数组又有微妙的不同. 2.vector 采用的是连续动态的空间来存储数据,它是动态的数组 ...
- Oracle索引梳理系列(一)- Oracle访问数据的方法
版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...
- 访问HTML元素(节点)
访问HTML元素等同于访问节点,能够以不同的 方式来访问HTML元素: 通过使用 getElementById() 方法 通过使用 getElementsByTagName() 方法 通过使用 get ...
- JS1 js获取dom元素方法
js获取dom元素方法 1.通过ID选取元素(getElementById) 1)使用方法:document.getElementById("domId") 其 ...
- Struts2 访问web元素
访问web元素的四种方法(耦合,依赖注入).(耦合,非依赖注入).(非耦合,依赖注入).(非耦合,非依赖注入) 耦合:可以得到HttpServletResponse,HttpServletReques ...
随机推荐
- 更换介质:请把标有…… DVD 的盘片插入驱动器“/media/cdrom/”再按回车键“ 解决方法
https://blog.csdn.net/no7oor/article/details/12776815
- [BZOJ3027][Ceoi2004]Sweet 容斥+组合数
3027: [Ceoi2004]Sweet Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 135 Solved: 66[Submit][Status] ...
- c#实现Form窗体始终在桌面最前端显示
方法一 //调用API [System.Runtime.InteropServices.DllImport("user32", CharSet = System.Runtime.I ...
- (12)python 标准库
模块 如果模块和自己写的程序不在同一个目录,可以通过sys.path.append(路径)把程序引入 import sys sys.path.append('C:/abc')#注意 \ 的方向 意思是 ...
- boost::operators
boost 的 operators 提供了comparison operators.arithmetic operators.operators for iterators 操作.虽然使用 C++ 的 ...
- pthread条件变量
pthread条件变量等待条件有两种方式:无条件等待pthread_cond_wait()和计时等待pthread_cond_timedwait(),其中计时等待方式如果在给定时刻前条件没有满足,则返 ...
- centos7下ip转发的配置
1.先确认ipv4配置了转发设置 vim /etc/sysctl.conf #命令1(编辑配置文件) net.ipv4.ip_forward=1 ...
- POJ 3622 Gourmet Grazers(贪心)
[题目链接] http://poj.org/problem?id=3622 [题目大意] 给出一些物品拥有两个属性值,价格和精美程度 给出一些需求表示要求获得的物品两个属性值的两种属性下界, 一个物品 ...
- python操作mysql封装成类
import pymysqlimport loggingimport sys # 加入日志#获取logger实例logger = logging.getLogger("baseSpider& ...
- Java高级架构师(一)第01节:整体课程概览
本课程专注于构建:高可扩展性.高性能.大数据量.高并发.分布式的系统架构. 从零开始.全面系统.成体系的软件架构课程,循序渐进的讲述构建上述系统架构所需要的各种技术知识和技能. 适应人群: 1:有一定 ...