在1处启动数组索引是否存在问题?

Sem*_*etg 4 c++ arrays

我的老师通常从一个开始索引数组.所以,基本上,当我们需要他使用的100个元素的数组时

int a[101] 
Run Code Online (Sandbox Code Playgroud)

代替

int a[100]
Run Code Online (Sandbox Code Playgroud)

例如,他像这样填写:

for (int i = 1; i <= 100; i++)
    cin >> a[i];
Run Code Online (Sandbox Code Playgroud)

使用这种方法有什么问题,还是应该避免使用?(从0开始处理索引时没有任何问题)

Sla*_*ica 16

我应该定期使用它,还是应该避免使用它?

你应该避免它.一个问题是,99.9%的C++开发人员不会与您和您的老师分享这种坏习惯,因此您会发现他们的代码难以理解,反之亦然.但是,这有更糟糕的问题.这样的索引将与任何标准算法和其他人跟随他们发生冲突,你会写明确讨厌的代码来解决它container.begin()container.end()以及std::begin()std::end()对C风格的阵列,按照到这是基于0的C++标准的工作.

注意:正如范围循环的注释中所提到的那样,隐式使用begin()/end()也会因为同样的原因而被破坏.虽然这个问题更糟糕,因为隐式使用了范围,并且在这种情况下没有简单的方法来使范围循环工作.