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 から始まるのが一般的です。さらに、もう 1 つ不要な要素を支払う必要があります。これは、現実の世界では良くありません。

于 2013-04-15T08:40:36.517 に答える
1

C++ ではなく、C++ と同様に、インデックスは配列に割り当てられたメモリ ブロックの先頭からのオフセットを表します。したがって、実際には、教師は特定のバイト数を無駄にしています (配列が何を構成しているかによって異なります)。

たとえば、配列が通常 1 から始まる Lua で使用されます。

于 2013-04-15T08:41:47.893 に答える
0

C/C++ の方法は、0 から始まる配列インデックスを使用することです。詳細な議論については、非対称境界に関する Andrew Koenigs の優れたシリーズを参照してください。Part1Part2Part3Part4、およびPart5。しかし、配列が 0 で始まる場合に記述しやすいアルゴリズムがいくつかあります。その 1 つはheapsortです。

于 2013-04-15T12:10:27.117 に答える