- 締切済み
C++言語の配列の呼び方,動的・可変長の違い
C++言語での配列の名称についての質問です. int Array[10]; みたいに宣言する普通の配列は「静的配列」と呼びますよね.コンパイル時に定数で要素数を指定しておかなければならないからですよね. これに対して,new[]演算子を用いて int *Array = new int[n]; といったように確保する配列はなんと呼ばれるのでしょうか. 実行後に変数を用いてその要素数を動的に指定できるので,「動的配列」と呼ぶ人が周りには多いです(「ポインタ配列」とも).しかし,C言語でのrealloc関数みたいに,直接に配列長を変化させるといったようなことはできませんよね. (改めてnew[]してmemcpy()すれば出来るのでしょうが) そこで,配列長をプログラム中で自在に変化させる方法としてstd::vectorを利用する方法がありますよね.このvectorを「動的配列」と呼ぶ人もいました. 私は,new[]したものは動的に要素数を指定できるがその後の配列長は固定であり,vectorはいつでも配列長が可変なので int Array[10]; ・・・静的固定長配列(静的配列) int n = 10; int *Array = new[n]; ・・・動的固定長配列 std::vector<int> v; ・・・可変長配列 と呼んでいるのですが,一般的にはそれぞれどのように呼ばれるのでしょうか. また,最近はstd::arrayをいうものを知りました.これについてもどのように呼ばれるのか,教えてください. よろしくお願いいたします.
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- kmee
- ベストアンサー率55% (1857/3366)
私の場合。 int Array[10]; 配列 int *Array = new int[n]; 配列 区別する必要がある場合は「new で確保したintの配列」と「それを覚えるためのポインタ『Array』」 std::vector<int> v; std::vector std::array<int,10> v; std::array 「配列のような動作をするクラス」は自作もできます。 メッソドやフィールド、機能が一緒とは限りません。 なので、そういう「配列のような動作をするクラス」まで含めて全部「配列」と呼ぶのは、ちょっと無理があると思います。 > 改めてnew[]してmemcpy() reallocでも、同様のことが行われることがあります。 また、C++では、安全だとわかっている場合を除いて、memcpyによるコピーは危険です。