0

myarray[n+1]我的老师通过使用 ( ) 开始数组并从上往下输入,从而不断从 1 开始数组i=1

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

4

5 回答 5

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.

于 2013-04-15T08:41:37.610 回答
2

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

于 2013-04-15T08:40:36.517 回答
1

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

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

于 2013-04-15T08:41:47.893 回答
0

在过去 20 年左右的时间里,我一直以 C 和 C++ 编程为生,但从未在我编写的任何代码中看到过这种情况。所以,不,这绝对不是常见的,甚至不是推荐的。这和其他人说的一样...

于 2013-04-15T08:50:31.093 回答
0

C/C++ 方法是使用从 0 开始的数组索引。要深入讨论,请查看 Andrew Koenigs 关于不对称边界的优秀系列。第1 部分、第 2部分、第 3部分第 4 部分和第5 部分。但是当数组以 0 开头时,有一些算法更容易描述。一种是heapsort

于 2013-04-15T12:10:27.117 回答