vector的下标索引与at的区别

访问容器元素时下标操作at函数的区别(C++) 对于C++的STL内的顺序容器,可以使用下标at函数对容器内的元素进行访问,如: //假设存在一个容器vector<int> v,现在要访问其第i个成员,下面两种方式是等价的 v[i] v.at(i) 二者的区别在于,如果下标越界(编译器并不检查这种错误),在运行时at函数会抛出一个out_of_range的异常,而下标操作不进行任何输出或直接运行奔溃: void test1() { vector<int> v; //定义一个空容器 cout << v 阅读详情

v.at(5)
//v[5]


如果vector v非空,那么at和下标索引没有区别。如果v为空,调用at会抛出异常,而operator[]索引的行为未定义。

c++标准不要求operator[]进行下标越界检查,原因是为了效率,下标越界检查会增加程序的性能开销。


vector at()和下标访问哪个好? vector 是可以直接用下标进行访问的一类容器, vector <int> A; A.push_back(1); cout<<A[0]; 输出:1 但是,有些资料上说vector 最好用at() 进行访问,这是为什么呢? 这是因为at()有对元素是否越界进行判断,如果越界,马上抛出异常 out_of_range (但是,这个异常是跟踪进去调试的时候才会出现的) 如果... 阅读详情

相关推荐

vector容器下at 和[]区别。map和vector的[]区别

1、vector下标操作不会添加元素,只能针对已经存在的元素操作。 2、map的下标操作具有副作用,key不存在,会在map中添加一个具有该key的新元素,新元素的value使用默认构造方法。 3、为什么要这样设计? vector是基于连续内存的容器,在尾部操作效率高,使用push_back添加元素,使用下标必须保证下表存在元素。 map是基于节点的容器,元素有序。使用下标操作,第一步是查找ke...

weixin_43277501的博客 1669

QList和QVector的一些基本用法

QList和QVector基本用法一样 QList<T> list 和QList<T*>list T可以是数据类型或者指针(类指针) 定义一个数据结构体 typedef struct student { int id; QString name; QString sex; int age; QString d...

vample的博客 2181

C++容器的下标操作at成员函数的区别

string,vector,deque,array都有下标操作和at成员函数,这俩个的区别是: 下标运算符不会检查是否在合法的范围内。如果越界,出现运行时错误。 at成员函数会检查是否越界,如果越界,则抛出一个out_of_range异常。 ...

qq_38229124的博客 579

C++ vector下标赋值push_back区别:从容量大小原理到实战避坑

在C++ STL容器中,std::vector作为动态数组的封装,其内存管理机制原生数组有本质区别。理解其核心原理需掌握容量(capacity)大小(size)的概念:容量是预分配的内存空间上限,大小是当前实际持有的元素数量。下标操作符[]严格遵循访问契约,仅用于操作已存在的元素(下标须满足0 <= n < size()),它不进行边界检查也不创建新元素,误用会导致未定义行为。相比之下,push_back和emplace_back作为元素添加操作,会检查并自动处理内存重分配,确保在容器末尾安全构造新元素

weixin_33928137的博客 333

数组和vector区别

本文基于邓俊辉编著《数据结构(C++语言版)(第3版)》、《C++ Primer(第5版)》以及网上的相关博文而写,博主水平有限,若有不妥处,欢迎指出。 一、数组 C++中数组是一种内置的数据类型。 数组是存放类型相同的对象的容器,数组的大小确定不变,不能随意向数组中增加元素。 1、定义和初始化内置数组 (1)数组的大小不变,(a[d],d为数组的维度),数组的维度必须是一个常量表达式。定义数组的时,必须指定数组的类型和大小。 (2)初始化时,允许不指明数组的维度,不指明维度,则编译器根据.

Peppa Pig 9019

map的下边访问和vector下标访问的区别

map这种容器的下边访问和Vector等容器的下标访问有本质的区别 对于Vector容器,用aVector[i]访问第i个元素时,如果元素不存在,容器不会增加元素,  而对于map,用aMap[key]  访问键key对应的对象时,如果该键对应的对象存在,则返回该对象(这和Vector一样),但是,当键值为key的元素不存在时,容器会自动的增加一个pair,键为key,而值则为一个容

人生代码,代码人生。。。 1479

关于数组、vector对象和array对象的区别联系_C++

关于数组、vector对象和array对象的区别联系 目录关于数组、vector对象和array对象的区别联系一、区别联系二、代码验证三、运行结果四、结果分析五、关于vector对象和array对象对非法索引的管理 一、区别联系 1.无论是数组,vector对象还是array对象,都可以用标准数组表示法来访问各个元素; 2. array对象和数组存储在相同的内存区域(栈),而vector对象存储在另一个区域(堆); 3. array对象可以赋值给另一个array对象,而数组必须逐元素进行复制数据;

Lanyan9的博客 1648

【C++容器】数组和vector、array三者区别和联系

本文基于邓俊辉编著《数据结构(C++语言版)(第3版)》、《C++ Primer(第5版)》以及网上的相关博文而写,博主水平有限,若有不妥处,欢迎指出。 一、数组 C++中数组是一种内置的数据类型。 数组是存放类型相同的对象的容器,数组的大小确定不变,不能随意向数组中增加元素。 1、定义和初始化内置数组 (1)数组的大小不变,(a[d],d为数组的维度),数组的维度必须是一个常量表...

我的笔记本 1万+

关于 std::vector下标越界检查

C语言(加了层语法糖的汇编)为了性能并不支持数组的越界检查,每次检查会多付出2-3倍的时间。 而vectorat的形式支持越界检查,但也支持C语言风格的[]高效访问,没错C++提供了足够的自由。 当要获取 std::vector 的第 n 个元素,下面几种方式都可以:   std::vector&lt;int&gt; vec; size_t n = 1; in...

night_cat1的博客 4577

C++之旅:vector容器中push_back下标[]访问方式添加元素的差异

对于push_back()方法添加元素时需要注意的是:对于有添加顺序需求的数组,元素添加顺序其相对应的索引需要保持一致,比如此处示例中的顶点数组;当然对于添加顺序无关的数组,元素的添加就无所谓了。三种方式,其中at()方法下标[]方法类似,都是通过下标访问的方式进行赋值,故记作同一种方式;若为空只能使用动态添加元素的方式push_back()方法。其实这两种方式添加元素最根本的区别是容器是否为空;此处以osg的geometry的矩形的4个顶点为例。对于下标[]访问进行赋值的方式需要注意的是。

qq_17464457的博客 505

C++之vector元素访问函数operator[]、at、front、back、data总结(二百零三)

本篇目的:理解C++之vector元素访问函数operator[]、at、front、back、data。operator[]作用:通过索引访问vector中的元素。用法:使用operator[]函数,通过指定索引来访问vector中的元素。索引从0开始,可以使用整数或表达式作为索引at作用:通过索引访问vector中的元素,并提供边界检查。用法:使用at函数,通过指定索引来访问vector中的元素。operator[]相比,at

Android系统攻城狮 2011

vector段错误

数组 在c语言中,我们说数组是随机存取的,存取的方式就是下标索引法。即假如我们要存或取一个数组的第n个元素,方法是一致的,都是“数组名[n-1]”。合法的操作是这个数组它的的确确具有第n个元素。 vector 在STL中,我们说vector也是随机存取的,存取方式有两种,一种是下标索引法,一种是调用成员函数at。后者相较于前者的区别是后者可以检验是否出界,更加安全,但时间效率不如前者。 初学者在使用vector时,不像数组一样会设定一个容量。当我们没有提前声明vector的容量时,计算机会给..

罗马尼亚硬拉 1328

C++ STL vector容器访问元素的几种方式

C++ STL vector容器访问元素的几种方式 < C++ STL vector容器迭代器的用法C++ vector容量(capacity)和大小(size)的区别 > 首先,vector 容器可以向普通数组那样访问存储的元素,甚至对指定下标处的元素进行修改,比如: #include <iostream> #include <vector> using namespace std; int main() { vector<int> values

南宫萧幕的博客 1万+

什么时候应该用C++ vector.at()和[ ]?(优缺点和越界访问时二者的区别

最主要的区别就是.at()会额外检查访问是否越界,如果越界,会抛出exception,所以使用.at()时程序运行速度较慢。 二者优点 一般来说用[]效率更高,尤其是需要对索引值进行复杂的计算或者单纯不需要检查是否越界时。 更好的做法是默认用.at(),这样代码尽管很慢但不会产生bug;[]更适合对程序效率要求比较高的场景。 []缺点 索引越界时程序不会报错,但会一路莽下去,在向量非空的情况下,即使下标越界,也有可能对应的内存是可读写的,至于读到的是什么内容,或者写到什么地方,就是随机事.

shuoO-24的空间站 6359

小记:数组下标索引的用法

        最近在逛知乎的时候,看到了一种比较特别的数组下标索引的方式,受到一些启发,所以简单的记录一下。        众所周知对于一个整型数组S,访问其内部的元素有几种方式。比如我们想要访问其3个元素可以是以下几种方式:1. int S[2]; 2. int *(S + 2); 这两种是我们很容易想到的表现方式,其本质上都是对地址的访问。我们这里介绍第三种方法,其样式如下:3. int 2...

weixin_41427400的博客 2053

ArrayList Vector LinkedList 区别用法

ArrayList Vector LinkedList 区别用法 最近用到了,所以依然是转载 ArrayList 和Vector是采用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,都允许直接序号索引元素,但是插入数据要设计到数组元素移动等内存操作,所以索引数据快插入数据慢,Vector由于使用了synchronized方法(线程安全)所以性能上比ArrayL

K_122的博客 1504

ArrayListVector区别

集合框架介绍 说明:对于以上的框架图有如下几点说明 1.所有集合类都位于java.util包下。Java的集合类主要由两个接口派生而出:Collection和Map,Collection和Map是Java集合框架的根接口,这两个接口又包含了一些子接口或实现类。 2. 集合接口:6个接口(短虚线表示),表示不同集合类型,是集合框架的基础。 3....

dianbiao3588的博客 163

ArrayListLinkedList以及Vector区别

复习一下list集合知识,记录一下。 参考文章:https://blog.csdn.net/qq_36520235/article/details/82535044 ArrayList实现原理: 1、ArrayList是List接口的可变数组非同步实现,并允许包括null在内的所有元素。 2、底层使用数组实现。(默认初始化长度为10) 3、该集合是可变长度数组,数组扩容时,会将原数组中的元素c...

InSunshine_的博客 406
上一篇: 在伦敦对冲基金工作多年的quant学习C++的经验
下一篇: 一文弄懂量化交易 怎样躺着赚钱?
heroesjun
博客等级 码龄19年 14粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值