注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

石门实验中学卢凯宾的博客

向前跑,迎着冷眼和嘲笑。

 
 
 

日志

 
 

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

2016-01-02 15:50:09|  分类: 语法与技巧 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
众所周知,在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;

  评论这张
 
阅读(17)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018