数组从1开始,普通

Array from 1, common?

本文关键字:普通 开始 数组      更新时间:2023-10-16

我的老师总是从1开始数组,从(myarray[n+1])开始数组,从i=1及以上输入数组。

这在现实世界中常见吗?他一直在做一些其他奇怪的事情,但这个让我摸不着头脑。

不,这不是一种常见的做法。这通常被认为是不好的做法。

按照语言设计的方式索引数组。如果你真的想从1开始索引,使用Matlab。你可以问问你的老师为什么这样做(然后告诉他们不要这样做)。

数组元素总是以某种方式初始化的。即使你忽略了第0个元素,它仍然在那里,这是不必要的内存浪费。它的构造函数甚至可能有一些不必要的副作用。

当你想让它与标准库兼容时,你也会遇到很多麻烦。当你用std::vector<int> v(array, array+N)std::vector<int> v(std::begin(array), std::end(array))创建一个向量时,你必须仔细考虑一下。与标准算法类似。

如果你想要一个从0开始索引的理由,记住它只是一个偏移量。数组下标操作符a[i]相当于*(a + i)。它基本上只是将指针a(可能通过某些转换检索)偏移到i

当然没有。c++中的数组从0开始,这很常见。而且,您还要为一个不需要的元素付出代价,这在现实世界中是不好的。

在c++中不是,因为在c++中索引表示从分配给数组的内存块开始的偏移量。所以实际上,你的老师浪费了一定的字节数(取决于数组的组成)。

例如,在Lua中使用,其中数组通常从1开始。

在过去的20多年里,我一直在用C和c++编程谋生,但在我编写的任何代码中从未见过这种情况。所以,不,这绝对不是常见的,甚至不是推荐的。这和其他人说的是一样的……

C/c++的方法是从0开始使用数组索引。要深入讨论,请参阅Andrew Koenigs关于非对称界的优秀系列。第一部分,第二部分,第三部分,第四部分和第五部分。但是当数组从0开始时,有一些算法更容易描述。一个是堆排序