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

关于数组、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()时,一旦在运行期间出现非法索引,程序会默认中断。

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值