数组来自1,常见吗?

时间:2013-04-15 08:39:59

标签: c++ arrays

我的老师通过使用(myarray[n+1])启动数组并从i=1向上输入来继续从1开始数组。

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

5 个答案:

答案 0 :(得分:5)

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

索引数组的语言设计方式。如果你真的想从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(可能通过某种转换检索)。

答案 1 :(得分:2)

当然没有。 C ++中的数组从0开始,这很常见。而且,你需要支付一个不需要的元素,这在现实世界中并不好。

答案 2 :(得分:1)

不在C ++中,如在C ++中,索引表示从为阵列分配的内存块的开头的偏移量。事实上,你的老师浪费了一些字节数(取决于数组包含的内容)。

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

答案 3 :(得分:0)

在过去20多年的时间里,我一直用C和C ++进行编程,而且从来没有在我使用的任何代码中看到过这种情况。所以,不,它绝对不是常见的,甚至是推荐的。这与其他人的说法相同......

答案 4 :(得分:0)

C / C ++方法是使用从0开始的数组索引。有关深入讨论,请参阅Andrew Koenigs关于不对称边界的优秀系列。 Part1Part2Part3Part4Part5。但是当数组从0开始时,有一些算法更容易描述。一个是heapsort