C++中数组下标访问负数的方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013686535/article/details/52141663
众所周知,在C++中数组下标是从0开始的,不像pascal可以定义负数下标。
因此如果我们调用a[-1]会越界,轻则返回一个奇怪的数字,重则直接运行时错误。
但是在解决实际问题时,有时还是难免要利用到下标进行直接访问和操作,而有时就会遇到下标可能有负数的情况。
这里介绍三种对策。
  1. 访问该数组时下标统一加上一个常数。例如:下标访问范围从-100到+50,那么取下标的下限(lowerlimit)的绝对值作为加上的常数。则本例中这个常数为100。原来要访问a[-100]变成a[-100+100]即a[0],a[0]变成a[0+100]即a[100],a[50]变成a[50+100]即a[150]。这种情况下,数组至少要开到(upperlimit-lowerlimit+1)个。
  2. 利用STL库中的map。优点:下标范围可以很大,甚至可以是无序类型。缺点:速度非常慢!用法如下:

    #include<map>//包含<map>头文件
    map<int, int>a; //定义格式为map<下标类型,基类型>标识符;
    int main() {
    a[-1] = 1;//下标可以从-INT_MAX到INT_MAX
    return 0;
    }

  3. 定义一个数组指针在原数组的中间,对这个指针进行操作,例:

    int a[100], *b = a + 50;
    b[-1] = 1; //a[49]=1;

阅读更多
换一批

没有更多推荐了,返回首页