众所周知,在C++中数组下标是从0开始的,不像pascal可以定义负数下标。
因此如果我们调用a[-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)个。
- 利用STL库中的map。优点:下标范围可以很大,甚至可以是无序类型。缺点:速度非常慢!用法如下:
#include<map>//包含<map>头文件
map<int, int>a; //定义格式为map<下标类型,基类型>标识符;
int main() {
a[-1] = 1;//下标可以从-INT_MAX到INT_MAX
return 0;
} - 定义一个数组指针在原数组的中间,对这个指针进行操作,例:
int a[100], *b = a + 50;
b[-1] = 1; //a[49]=1;
本文介绍了在C++中处理负数数组下标的方法,包括通过调整下标基准值、使用STL map以及定义数组指针指向中间位置等三种方案。
8409

被折叠的 条评论
为什么被折叠?



