数组从1开始,普通
Array from 1, common?
我的老师总是从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开始时,有一些算法更容易描述。一个是堆排序
- 当回溯以零开始时,如何调试崩溃
- 普通环路未使用gcc 4.8.5自动矢量化
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 将按位if条件转换为普通if条件
- 根据用户输入用字母填充矢量,并将"开始"和"结束"放在四肢
- 如何从头开始创建 avi 文件?
- 为什么 -mmacosx-version-min=10.10 不阻止使用标记为从 10.11 开始的函数?
- 自一周开始以来的秒数?
- 一旦双簧管录制开始,主 UI 线程就会被阻止
- GStreamer在开始任何播放之前进行搜索
- 使 std::fstream 写入文件末尾,但从头开始读取
- 将包含抽象类和普通类C++包导出到 Python
- 如何以毫秒为单位获取开始时间和 now() 之间的毫秒差异(以 C++为单位?
- 构造智能点数据类型以及普通数据类型的通用方法
- 哪个C++规范开始支持 std::vector
- 如何继续读取不同功能中的文件,而不是从头开始再次读取文件?
- 如何在 c++ 中确定一条指令(以字节为单位)在哪里结束,另一条指令从哪里开始?
- 如何在调试中通过传递引用开始
- 普通模板在哪里结束,元模板从哪里开始
- 数组从1开始,普通