myarray[n+1]
私の先生は、配列を ( ) で始めてから上に入力することで、配列を 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 から始まるのが一般的です。さらに、もう 1 つ不要な要素を支払う必要があります。これは、現実の世界では良くありません。
C++ ではなく、C++ と同様に、インデックスは配列に割り当てられたメモリ ブロックの先頭からのオフセットを表します。したがって、実際には、教師は特定のバイト数を無駄にしています (配列が何を構成しているかによって異なります)。
たとえば、配列が通常 1 から始まる Lua で使用されます。