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

本文介绍了在C++中处理负数数组下标的方法,包括通过调整下标基准值、使用STL map以及定义数组指针指向中间位置等三种方案。
众所周知,在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;

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值