数组

来源:互联网 发布:装修淘宝店铺怎么装修 编辑:程序博客网 时间:2024/04/28 22:09

存储块就是一个数组,它是根据基址和偏移地址来寻址的,而数组也是这样。
数组的优势是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 << " ";
  }
 }

原创粉丝点击