访问vector元素方法的效率比较

C++ vector unordered_map速度对比(含迭代器) C++ vector unordered_map速度对比(含迭代器) 下面这段程序是我进行的一个对比实验,数组的维数是3000,重复500000次,统计总耗时(使用Release模式,开启O2优化)。 #include<iostream> #include<vector> #include<ctime> #include<unordered_set> #pragma GCC optimize(2) using namespace std; int main 阅读详情

比较访问vector元素的两种方式:

一、使用下标访问;

二、使用迭代器(类似指针)访问。

 代码:

#include<iostream>
#include<vector>
#include<windows.h>

using namespace std;

int main(){
	vector<int> vec;	
	vec.resize(100010000);
	
	//实验组一
	int start=GetTickCount();
	for(int i=0;i<vec.size();i++){
		vec[i]=i;
	}
	int end=GetTickCount();
	cout<<"实验组一: for循环中使用下标方式,i++方式,循环体内使用下标赋值 "<<endl; 
	cout<<(end-start)<<endl;
		
	//实验组二
	start=GetTickCount();
	for(int i=0;i<vec.size();++i){
		vec[i]=i;
	}
	end=GetTickCount();	
	cout<<"实验组二: for循环中使用下标方式,++i方式,循环体内使用下标赋值"<<endl;
	cout<<(end-start)<<endl;

	int i;
	//实验组三
	start=GetTickCount();
	i=0;
	for(vector<int>::iterator it=vec.begin();i<vec.size();i++,++it){
		*it=i;
	}	
	end=GetTickCount();	
	cout<<"实验组三: for循环中使用迭代器,迭代器++it方式,循环体内使用迭代器(向量)赋值  "<<endl; 
	cout<<(end-start)<<endl;
	
	//实验组四
	start=GetTickCount();
	i=0;
	for(vector<int>::iterator it=vec.begin();i<vec.size();i++,++it){
		vec[i]=i;
	}	
	end=GetTickCount();	
	cout<<"实验组四: for循环中使用迭代器,迭代器++it方式,循环体内使用下标赋值   "<<endl; 
	cout<<(end-start)<<endl;
	
	//实验组五
	start=GetTickCount();
	i=0;
	for(vector<int>::iterator it=vec.begin();i<vec.size();i++,it++){
		*it=i;
	}	
	end=GetTickCount();
	cout<<"实验组五: for循环中使用迭代器,迭代器it++方式,循环体内使用迭代器(向量)赋值 	 "<<endl; 
	cout<<(end-start)<<endl;
	
	//实验组六
	start=GetTickCount();
	for(vector<int>::iterator it=vec.begin();it!=vec.end();it++){
		*it=i;
	}	
	end=GetTickCount();
	cout<<"实验组六: for循环中使用迭代器,迭代器it++方式,用end()判断结束,循环体内使用迭代器(向量)赋值 	 "<<endl; 
	cout<<(end-start)<<endl;
	
	return 0;
}

结果:

结论:

1、int型i,i++与++i速度相差无几; (对比一二,453, 454)

2、赋值时,迭代器访问要比下标访问快,即 *it=i 比 vec[i]=i 速度快;  (对比三四,578,609)

3、对于迭代器 vector<int>::iterator it, ++it 比 it++ 快很多;  (对比三五,578,1094)

4、用 it!=vec.end() 判断循环结束,耗时比较久; (对比五六, 1094, 1937)

5、总结:遍历vector时,用下标访问即可。

ps: vec.end(),返回最末元素的下一个位置的迭代器,求最末元素数值可用: *(vec.end()-1) 。

①、vec.front() ,vec.back(),返回第一个元素,最后一个元素;

②、vec.begin(), vec.end(),返回第一个元素的迭代器,最后一个元素的下一个位置的迭代器。

深度剖析Java集合之Vector 其实Vector和ArrayList一样,都是基于数组实现的List,也就是说都是属于List 阵营的,其主要的区别是在于线程安全上,二者的底层实现都是基于数组的 Vector 实现线程安全的方式就是给方法上加synchronized 锁,**所以线程安全的情况下请使用ArrayList,多线程的情况下使用Vector**,Vector 在目前的开发中也用的不多,主要是它实现线程安全的方式比较低效,但是如果有一天Java 将synchronized锁的效率提高了,那Vector依然是一个不错的选择 阅读详情

相关推荐

金融学习之十三——数据去极值和标准化处理

拿到数据后,数据中可能会存在一些超大或极小的值,这些值与其他的值离得较远,显得格格不入,我们称其为离群点,有时也称为异常点。对于这些值,它的存在会导致影响最终的分析结果,带偏我们的分析。举个简单的例子,10个人的收入分别为2000,2500,2300,2425,2512,2375,2700,2265,2345,10000000,只算前9个,平均值就是2380,但加上最后一个,平均值就是1002144.2,就可能严重带偏最后分析的结果。因此,对于这样的数据,我们需要将其去除或修改。 (一)数据去极值 数据去极

ryo007gnnu的博客 7168

C++(STL)容器采用迭代器访问及下标访问的效率详细对比,附详细代码及测试结果。

C++(STL)容器处理大量数据时的遍历操作,代码效率情况如何,今天做一个系统的效能测试,对比写不同的代码书写方法对效率的影响。值得注意的是,容器遍历这种底层操作,往往对上层高度封装后的代码效率在几何累计效应之下会产生巨大影响,不可忽视。 我们选用最简单的vector容器作为测试目标。先看下测试代码: void main() { vector<byte> tagv; ...

carlclouder的博客 6670

ubuntu20.4源码安装最新gcc(gcc V12.2)

Ubuntu20.4自带的gcc为V9.4.0的版本,老版本的gcc存在不支持新版本C语言规范,在配置、编译、安装应用软件或工具时,可能存在不能正确安装的问题。(比如:libpqxx-7.7.4在配置时要求c++17版本的支持,但gcc V9.4.0版本不支持c++17)。因此本文介绍ubuntu20.4的系统下载最新gcc12.2版本源码,并进行本地编译、安装。本节内容包括gcc12.2的必备库安装和gcc12.2安装两部分内容组成。

q544344318的博客 1万+

C++ STL vector遍历方式及其效率分析

C++ STL vector遍历方式及其效率分析++i和i++区别下标遍历迭代器遍历for_each遍历总结 ++i和i++区别 ++i使用的是i执行完+1后的值可以直接使用,而i++是先使用i然后在对i进行+1这样就需要一个临时变量去进行转储,虽然只是一个简单的操作但是在循环中这一操作就会被循环次数而放大。如果i是一个简单的int型变量在很多编译器里面会优化这种写法,但是如果i是一个迭代器那么循环的性能就会收到影响,具体大小受到循环次数的约束。笔者亲测在QT中部分源码以及输出如下: std::vec

qq_33865609的博客 3547

【数据结构】汉诺塔问题(丰富图解)

经典汉诺塔问题,丰富图解,助你理解。

℉f的博客 4107

保姆级教程:在RK3588开发板上用CMake交叉编译ZLMediaKit(附完整toolchain配置)

本文提供了一份详细的RK3588开发板上使用CMake交叉编译ZLMediaKit的教程,包括完整的toolchain配置和实战避坑指南。从环境准备、工具链配置到依赖处理、编译部署,手把手指导开发者完成ARM64架构的流媒体服务搭建,特别适合嵌入式开发新手。

weixin_28681255的博客 383

c++ 迭代器与下标访问效率问题

今天验证下在 c++ vector 下标访问及迭代器访问的效率问题。100W 数据存放到 vector 里。便利访问,以为打印的效率很低,所以不打印,只是访问下就 ok。 首先用迭代器的方式访问了一下。 平均时间: real 0m0.009s user 0m0.008s sys 0m0.000sint main() { std::vector<int> vecInt(1

yuhaiyang457288的专栏 7393

拆解一个800G光模块:手把手带你认识里面的MT插芯和光纤阵列(FA)

本文详细拆解了800G光模块中的关键组件MT插芯和光纤阵列(FA),揭示了并行光学技术如何实现高速数据传输。通过显微镜下的精密观察,展示了MT插芯的高精度构造和光纤阵列的连接奥秘,同时解析了高精度研磨工艺对光信号传输的重要性。这些微型组件是高速收发模块实现800Gbps带宽的核心技术。

weixin_30839881的博客 1554

C++ 对容器的下标访问、C++11新特性访问以及迭代器访问速度对比

结论:下标访问最快,其次到C++11新特性方式,最慢的是迭代器访问 贴代码:`#include #include <time.h> #include using namespace std; int main() { vector pri(10000,1); time_t begin,end; double ret=0; begin = clock(); for(auto iter...

weixin_42907473的博客 1422

STM32巡线小车PID调参实战:从五路灰度传感器数据到稳定运行的避坑指南

本文详细介绍了STM32巡线小车的PID调参实战,从五路灰度传感器数据处理到PID参数优化,提供了系统化的调试方法和常见问题解决方案。通过加权平均法计算偏移量,逐步调整比例、积分、微分参数,实现小车稳定巡线。文章还涵盖了定时器配置、控制周期优化及高级调试技巧,帮助开发者避开常见陷阱,提升巡线性能。

weixin_42570484的博客 194

自定义载板RK3588HDMI输入配置完整解决方案

✅ HDMI输入信号检测✅ 自动时序识别(支持1080p@60Hz等标准格式)✅ V4L2视频设备接口✅ 实时视频流捕获✅ H.264编码录制✅ HDCP内容保护支持问题根因识别:发现了hdmim1模块资源冲突的本质问题硬件设计理解:明确了Orange Pi 5 Plus的真实硬件设计意图功能实现:成功启用HDMI输入功能,替代了无法使用的HDMI1输出完整验证:建立了从硬件检测到视频录制的完整测试流程。

梁俊星的博客 1271

访问vector元素方法的效率比较(转)

LInux下: gcc 4.47,red hat6 1 #include&lt;iostream&gt; 2 #include&lt;vector&gt; 3 #include&lt;time.h&gt; 4 using namespace std; 5 6 7 8 int main() { 9 //建立4个vector,使用列表初始化,相当与调用拷贝构造函数 1...

weixin_34268169的博客 328

MATLAB与ROS联合仿真——控制类功能模块介绍

MATLAB与ROS联合仿真——控制类功能模块介绍

慕羽★的博客 2353

【C++】中Vector与List的比较

这里begin()是指向List第一个元素的迭代器,插入操作是在这个迭代器指向的元素之前插入新元素。删除头部元素使用pop_front()函数,尾部元素使用pop_back()函数,例如。其中begin()是指向第一个元素的迭代器,end()是指向最后一个元素的迭代器。下面让我们来了解一下List及List和Vector的区别。:使用insert()函数。例如:在某个迭代器位置插入元素。3List和Vector的比较。3List和Vector的比较。

sjy123456__的博客 1348

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

STL容器之vector

template class vector; // generic template vector有个针对bool的specialization,然而这玩意与bitset有点意思,等与他一起讨论。 嗯,vector是一个失败的贵族实验,原本是用来展示”代理类”的设计模式的,可是又不小心写进了标准了。于是存在到现在 template > class vector; // generic

https://gitee.com/liuyuan185442111/chest-view 537

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

std::vector

参考C++ vector使用详解 中文标准库:std::vector Vector、Array、数组的区别与联系 一、vector简介 C++的vector本质上是一个动态数组,它的元素是连续存储的,这意味着不仅可以通过迭代器访问元素,还可以使用指向元素的常规指针来对其进行访问。还可以将指向 vector 元素的指针传递给任何需要指向数组元素的指针的函数。 vector的存储是自动处理的,...

qq_38349382的博客 415

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Java集合系列:Vector解析

本文转自:http://www.cnblogs.com/skywang12345/p/3308833.html 目录 摘要 第1部分 Vector介绍 第2部分 Vector数据结构 第3部分 Vector源码解析(基于JDK1.6.0_45) 第4部分 Vector遍历方式 第5部分 Vector示例 摘要 学完ArrayList和LinkedList之后,我们接着学习Vect...

渣渣 6487

java的List接口的实现类 ArrayList,LinkedList,Vector 的区别

Java的List接口有3个实现类,分别是ArrayList、LinkedList、Vector,他们用于存放多个元素,维护元素的次序,而且允许元素重复。 3个具体实现类的区别如下:            1. ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要将已经有数组

Di1nuli的专栏 1万+

vector 访问元素的两种方法比较

访问vector中的元素有两种方法: (1)vector::at。该成员函数会进行下标越界检查,确保当前vector中的确包含了需要的元素; (2)vector::operator[]。根据C++98标准,vector::operator[]可以但是比一定会进行下标越界检查; 例如 有下面的代码: void fun(vector&v){ v[0]; //A v.at[0];//B

小队员的博客 5217

关于几种std::vector访问方法的效率

 #define _SECURE_SCL 0#include boost/foreach.hpp>#include list>#include vector>#include algorithm>#include cstdlib>#include time.h>#include stdio.h>using namespace std;templatetypename Container

Jarod 的半个程序员 3347

c++数组和 vector访问执行性能比较

最近在刷leetcode时,发现对一组数据频繁操作,数组的效率比 vector快很多,让习惯用vector的我着实有点懵,于是做了一下实验 windows上执行 首先,我在win10上用vs2015,将数组和vector分别对数组进行10万次操作,结果很明显。 下面是运行代码: #include<iostream> #include<windows.h> #include< vector > #include< algorithm > #include.

h799710的博客 1万+

C++效率掌握之STL库:vector函数全解

本篇是STL库专题之vector,该类在算法题中广泛应用,既有数组的特性,又有简单的遍历,增删查改的操作函数,大大减少了传统数组的繁琐

Zero_VPN的博客 2858

微软vs stl中vector和list的效率比较

其实微软的stl list是一个比较鸡肋的东西。 按照理解,链表(list)的插入和删除时间和空间开销应该比顺序表(vector)的效率更高。考虑删除操作,由于vector删除的时候,会存在内存拷贝,所以时间和空间效率开销肯定较之于list大,这个毫无疑问。但是令我始料不及的是list的push_back操作竟然比vector慢,而且慢很多。 根据笔者推断有可能是由于stl的list是双向链表

libaoshan55的博客 4110
上一篇: 第三章:查找与排序(下)----------- 3.9 最快效率求出乱序数组中第k小的数
下一篇: 自媒体平台运营的感悟
Estrellas_
博客等级 码龄9年 273粉丝 233原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值