访问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 ...
随机推荐
- hdu 1140(三维)
War on Weather Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- linux上redis的安装与配置
1.redis安装 wget http://download.redis.io/releases/redis-4.0.8.tar.gz tar xzf redis-4.0.8.tar.gz ln -s ...
- 详解ListView加载网络图片的优化,让你轻松掌握!
详解ListView加载网络图片的优化,让你轻松掌握! 写博客辛苦了,转载的朋友请标明出处哦,finddreams(http://blog.csdn.net/finddreams/article/de ...
- 胖AP与瘦AP区别
一.胖AP组网方案 1.漫游问题 用户从一个胖AP的覆盖区域走到另一个胖AP的覆盖区域,会重新连接信号强的一个胖AP,重新进行认证,重新获取IP地址,存在断网现象: 2.无法保证WLAN的安全性 为了 ...
- NYOJ 6.喷水装置(一)-贪心
喷水装置(一) 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为Ri的喷水装置,每个喷水装置的效果都会让以 ...
- 使用scrapy爬取金庸小说目录和章节url
刚接触使用scrapy的时候,如果一开始就想实现特别复杂的配置,显然是不太现实的,用一些小的例子可以帮助自己理解各个模块. 今天的目标:爬取http://www.luoxia.com/shendiao ...
- 优先队列priority_queue
优先队列容器与队列一样,只能从队尾插入元素,从队首删除元素.但是它有一个特性,就是队列中最大的元素总是位于队首,所以出队时,并非按照先进先出的原则进行,而是将当前队列中最大的元素出队.这点类似于给队列 ...
- Linux命令之ps
ps [选项] 报告当前进程状态.ps显示有关选择的活动进程的信息.如果要重复更新选择和显示的信息,请使用top.ps命令可以搭配kill随时中断.删除不必要的程序.ps命令是最基本同时也是非常强大的 ...
- HashSet如何排序
方法一: 把HashSet保存在ArrayList里,再用Collections.sort()方法比較 private void doSort(){ final HashSet<Integer& ...
- python3开发进阶-Web框架的前奏
我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端. 这样我们就可以自己实现Web框架了. 1.自定义web框架 import socket ...