数组

本文深入探讨了数组和C++ STL中的vector容器的工作原理及其特点。介绍了数组如何通过索引进行高效访问,以及C/C++中数组越界的问题。同时对比了vector的at()方法与[]操作符在越界处理上的不同,并提供了一个使用vector实现质数查找的实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

存储块就是一个数组,它是根据基址和偏移地址来寻址的,而数组也是这样。
数组的优势是a[i]。因为数组跟存储块有着惊人的相似之处所以数组能够根据索引(相对位置)快速的访

问到其中的元素,这就是数组的a[i]优势(a[i]就简单的对应几条机器指令)。

数组的特点是:
物以类聚,元素都是同一种类型。
左邻右舍,线性连续存储。


C/C++语言中的数组不支持下标越界检查,即数组越界时不会抛出异常,程序无法捕捉--try..catch没用

。而stl里面的vector的成员函数at是支持越界检查的,在越界时它会抛出out_of_range异常,程序因此

可以捕捉到;但vector的operator[]是不支持越界检查的(即不抛出异常)。以下是一个例子:
 vector<int>  data;
 data.push_back(1);
 try
 {
  cout << data.at(1) << endl;
 // 抛出out_of_range异常。如果换成data[1]则没有异常抛出,系统终止程序并报错。
 }
 catch( out_of_range e )
 {
  cout << "out of range" << endl;
 }
 catch(...)
 {
  cout << "exception" << endl;
 }


以下是用数组vector来求质数的一个例子:
 vector<int>  data;
 data.reserve(10001);  // 0到10000的质数
 for ( int pos = 0; pos < 10001; pos ++ )
 {
  data.push_back(1);  // 假定所有都是质数,以1标识
 }

 for ( int pos = 2; pos < 10001; pos ++ )
 {
  if ( (pos%2==0) || (pos%3==0) || (pos%5==0) )
   data[pos] = 0;  // 2或3或5的倍数不是质数
 }
 data[2] = data[3] = data[5] = 1;

 // 输出质数
 for ( int pos = 2; pos < 10001; pos ++ )
 {
  if ( data[pos] == 1 )
  {
   cout << pos << " ";
  }
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值