动态数组索引越界问题

本文探讨了C++中动态数组和STL vector容器的索引越界问题。通过示例展示了不正确使用索引可能导致的错误,并提出使用vector的at()函数或自定义[]操作符来避免此类问题。同时,文章提到了vector的动态增长机制及其潜在性能影响,建议在创建vector时预估所需容量以提高效率。
摘要由CSDN通过智能技术生成

1、在C++中,可以采用几种不同的方法创建一个某种类型T的对象的数组。3种常用的方法如下:

#define N 10 //数组的长度N在编译时已知
  T static_array[10];

  int n = 20; //数组的长度n是在运行时计算的
  T* dynamic_array = new T[n];

  std::vector<T> vector_array; //数组的长度可以在运行时进行修改

当然,我们仍然可以使用calloc()和malloc()函数,并且这样的程序仍然能够通过编译并顺利运行。但是,混合C和C++代码并不是良好的编程思路,除非由于依赖遗留的C函数库的原因而必须这样做。不管我们用什么方法分配数组,都可以用一个无符号整数作为索引访问数组中的元素。

const T& element_of_static_array = static_array[index];
const T& element_of_dynamic_array = dynamic_array[index];
const T& element_of_vector_array = vector_array[index];

如果我们提供一个大于或等于数组长度的索引值,会发生什么情况呢?以上的代码都会安静的返回垃圾数据。如果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值