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

NR RRC协议(2)---RRC连接建立流程 RRC连接建立目的是建立SRB1 RRC连接建立还用于将初始NAS消息从UE传送到网络 RRC连接的初始阶段期间,不激活AS安全性 RRC连接建立由UE侧发起 阅读详情

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

一、区别与联系

1.无论是数组,vector对象还是array对象,都可以用标准数组表示法来访问各个元素;
2. array对象和数组存储在相同的内存区域(栈),而vector对象存储在另一个区域(堆);
3. array对象可以赋值给另一个array对象,而数组必须逐元素进行复制数据;
4. 无论是数组,vector对象还是array对象,都会出现数组越界问题,但是vector对象和array对象可以采取一定的方式进行避免(调用成员函数at())。

二、代码验证

#include <iostream>
#include <vector>
#include <array>

int main() {
    //定义数组
    double a1[4] = {1.2, 2.4, 3.6, 4.8};

    //定义vector对象
    vector<double> a2(4);
    a2[0] = 1.0/3.0;
    a2[1] = 1.0/5.0;
    a2[2] = 1.0/7.0;
    a2[3] = 1.0/9.0;

    //定义数组对象
    array<double, 4> a3 = {3.14, 2.72, 1.62, 1.41};
    array<double, 4> a4 = {};
    a4 = a3;

    //输出
    cout << "a1[2]: " << a1[2] << " at " << &a1[2] << endl;
    cout << "a2[2]: " << a2[2] << " at " << &a2[2] << endl;
    cout << "a3[2]: " << a3[2] << " at " << &a3[2] << endl;
    cout << "a4[2]: " << a4[2] << " at " << &a4[2] << endl << endl;
		
	 //注意:出现越界数据
    a1[-2] = 20.2;
    cout << "a1[-2]: " << a1[-2] << " at " << &a1[-2] << endl;
    cout << "a3[2]: " << a3[2] << " at " << &a3[2] << endl;
    cout << "a4[2]: " << a4[2] << " at " << &a4[2] << endl;

    return 0;
}

三、运行结果

在这里插入图片描述

四、结果分析

1.标准数组表示指的是[];
2.由输出地址可见,vector对象与数组、array对象的地址不一样;
3. -2是一种非法索引,但是并没有报错,实际上,无论是数组,vector对象还是array对象,都会出现数组越界问题。

五、关于vector对象和array对象对非法索引的管理

关于确定索引值是否合法,可以使用vector对象或array对象的at()函数进行规避:

a2.at(1);		//1符合数组下标的范围

使用at()时,一旦在运行期间出现非法索引,程序会默认中断。

注意:这种额外检查的代价是运行时间更长,但是可以降低意外超界错误的概率。

QT下利用FFTW实现功率谱密度分析(周期图法) 写在前面 出于项目需求,需要在QT的msvc 2015编译环境下实现功率谱密度估计。 所以这个需求很直接的关键词就是 1. C++ 2. QT 3. 傅里叶变换 4. 功率谱密度估计 但是在网上搜索了很久,没有一个非常直接的答案。所以我觉得很有必要写一篇文章来说明,在QT msvc2015 32bit环境下如何实现功率谱密度估计。 本文并没有经过严格编辑,但代码是已经可以跑通的,如... 阅读详情

相关推荐

Xilinx Chip2Chip IP核实战:Aurora PHY通信配置仿真避坑指南

本文深入解析Xilinx Chip2Chip IP核Aurora PHY的通信配置仿真优化,提供实战避坑指南。通过AXI协议转换桥实现FPGA间高速数据传输,详细讲解Aurora PHY参数设置、仿真加速技巧及常见问题解决方案,帮助工程师快速部署稳定高效的芯片间通信系统。

g5h6i7j的博客 978

数组vector区别

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

Peppa Pig 9020

手把手教你用C#LibUsbDotNet实现USB设备通信(含完整代码示例)

本文详细介绍了如何使用C#LibUsbDotNet库实现USB设备通信,包括设备识别、连接建立、同步/异步数据读写等核心操作。通过完整的代码示例,开发者可以快速掌握USB通信的关键技术,适用于工业自动化、医疗设备等多种场景。重点讲解了数据读写优化错误处理技巧,帮助提升通信效率可靠性。

a3b4c5的博客 662

数组vector区别联系

数组vector区别联系

weixin_42492218的博客 4031

Vector数组区别

数组c++中类似vector的数据结构,它们都可以对一种类型进行储存,既都是容器。虽说两者有相似之处,但也有显著的区别c++ primer的作者说到,在实际的编程中,我们作为程序员应该避免用到低级数组指针,而更应该多用高级的vector迭代器。在程序强调速度的情况下,我们程序员可以在类类型的内部使用数组指针。下面我对vector数组进行了总结。两者的相同区别如下:

编程人生 3万+

C++中的vectorC语言中的数组区别

vectorC语言中的数组区别

学无止境 1206

c++ vector数组详细介绍

总的来说,vector 提供了更多的灵活性安全性,尤其是在处理大小可变的数据集时。而数组在处理固定大小类型的数据时可能更为高效。vector 的大小是指它当前包含的元素数量。vector 的容量是指在需要重新分配内存之前它可以容纳的元素数量。STL 算法库包括一系列标准化的函数,用于执行范围内的操作,如排序、搜索、转换、计数等。这些算法通常通过一对迭代器来指定作用的范围(例如,begin() end())。对象集合:存储自定义类或结构体实例的集合,如员工名单、学生记录等。

shopeeai的博客 2366

C++】复合类型之vectorarray模板(二)

3、比较数组vector对象array对象从一个程序开始:输出结果:需要注意的地方:(1) 一个array对象可以赋给另一个array对象,而数组,必须逐个元素复制数据。(2) 注意这个语句:a1[-2] = 20.2;其含义是:找到a1指向的地方,向前移两个double元素,并将20.2存储到目的地。也就是说,将信息存储在数组的外面。C语言一样,C++也不检查这种超界错误。vectora...

swust_zhangchun的博客 289

比较数组,模板array模板vector

先上简单的一个实例: #include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;array&gt; int main() { using namespace std; //C,original C++ double a1[4] = {1.2,2.4,3.6,4.8}; //C++98 STL vector&lt;do...

caixiaobai_1的博客 288

Essential C++学习记录&笔记整理5(如何运用ArrayVector

说实话从这节开始就C产生了隔阂了,很多知识都是新知识了,不好理解,尤其是这一节,我读了两遍,总算明白了些东西吧,实际上这还有很多需要了解的东西,慢慢了解去! 如何运用Array Vector 1.容器的定义 容器:存放操作其他对象对象。1 2.array数组Vector类 在C++中,我们可以用其内置的array数组)类型或标准库提供的vector类来定义容器。 建议用vecto...

Bqv它不想做功的博客 250

C++编程:复合数据类型—模板类vector

vector其实是C++中的一个“类模板”,是用来创建类的“模子”。除了vector之外,C++ 11 还新增了一个array模板类,它跟数组更加类似,长度是固定的,但更加方便、更加安全。vector是包含了数据对象的“容器”,在这个容器集合中,每个数据对象都会有一个编号,用来做方便快速的访问;这里的push_back同样是一个成员函数,调用它的时候在小括号里传入想要添加的数值,就可以让vector对象中增加一个元素了。vector的长度并不是固定的,所以可以向一个定义好的vector添加元素。

zjjcchina的博客 226

C++ PrimerPlus 复习 第四章 复合类型(下)

vector是一种动态数组,可以在运行阶段设置vector对象的长度,可在末尾附加新数据,也可在中间插入新数据。它使用newdelete来管理内存,但这种工作是自动完成的。要使用vector对象,必须包含头文件vector,并且vector包含在名称空间std中。vector使用不同的语法来指出它存储的数据类型。创建一个存储整数的vector对象vector类使用不同的语法来指定元素数。例如:创建一个可以存储n个双精度浮点数的vector对象。重要问题及答案:vector是什么?vector

L2489754250的博客 314

C++ Primer Plus 阅读摘要

C++ Notes 对象是类的特定实例,类定义了数据的存储使用方式。类描述了一种数据类型的全部属性(包括可使用它执行的操作),对象是根据这些描述创建的实体。 str或sz表示一空字符结束的字符串,b表示布尔值,p表示指针,c表示单个字符 头文件climits中包含关于整型限制的信息 sizeof运算符可对类型名(放置括号中)或变量名(直接跟在sizeof)后面进行计算 cou...

PURE的博客 280

C++模板进阶

预处理会把报的头文件都展开,定义的宏都替换掉,编译会去检查代码的语法,然后生成汇编代码,汇编是会把代码转成二进制机器码以便CPU识别执行,最后链接会把目标文件集合在一起生成可执行程序,并把需要的函数地址都链接上,所有函数会会都记录在一个表上,当在其它地方声明时链接会到这里去找到对应的函数来匹配。

2302_80378107的博客 1281

C++学习笔记4 - 符合类型

C++ Primer Plus  第6版》读书笔记 知识点: 1.C++数组初始化 可以省略“=”   int lift[10] {1, 2, 4};   等价 int lift[10] = {1, 2, 4};   int lift[10] {}; //等于  {0} 2.'S' 是83的另一种写法。“S” 表示 S\0  并且“S” 表示的为地址 3.键盘输入读取一行处理  

静心修行 560

4-2用for-in循环枚举集合中的元素

for-in循环for循环的区别 for - 循环代码块一定的次数 for/in - 遍历数组或者对象的属性(对数组或者对象的属性进行循环操作) #include<iostream> #include<array> #include<vector> using namespace std; int main(int argc, char* argv...

罗伊的博客 405

C++ 数组 array vector间的联系区别

一.C++ 数组 array vector间的联系区别 相同点: 1.都数组类似,都可以使用标准数组的表示方法来访问每个元素;arrayvector都针对下标运算符[]进行了重载 2.三者的存储都是使用的连续内存,都可以进行随机访问;在arrayvector的底层存储结构均使用数组。 不同点: 1.array数组属于定长容量,定义后的空间是固定的,不能进行改变; 但是vector属于变长容器,提供了可以动态插入删除元素的机制,可以根据数据的 插入删除重新构建容器容量

weixin_42258743的博客 5469

C++容器】数组vectorarray三者区别联系

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

我的笔记本 1万+

C++arrayvector数组三者区别联系

共同点 (1.)都数组相似,都可以使用标准数组的表示方法来访问每个元素(arrayvector都对下标运算符[ ]进行了重载) (2.)三者的存储都是连续的,可以进行随机访问 不同点 (0.)数组是不安全的,arrayvector是比较安全的(有效的避免越界等问题) (1.)array对象数组存储在相同的内存区域(栈)中,vector对象存储在自由存储区(堆) (2...

alidada_blog的博客 2万+

C++学习-入门到精通-【5】类模板arrayvector、异常捕获

vertor<类型> 名称(大小);示例代码int main()// array类模板的声明类似,在<>中指定保存元素的类型,但是容量在变量名后指定// 创建一个有7个int类型元素的vector对象// 创建一个有7个int类型元素的vector对象// 输出两个vector对象的大小及默认初始值// 输出17个整数用于初始化两个vector对象// 输出赋值后的vector对象的值// 创建一个新vector对象,并使用integer1赋值。

PLKDTHFS的博客 2838

认识、使用C++vectorarray

简单了解C++数组替代品,vectorarray

muwithxi的博客 1513
上一篇: C++多文件编程是什么
下一篇: 循环与关系表达式简单练习_C++基础
FifthDesign
博客等级 码龄6年 1129粉丝 94原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值