std.container.array
ソースstd/container/array.d sourceソース
auto arr = Array!int(0, 2, 3); writeln(arr[0]); // 0 writeln(arr.front); // 0 writeln(arr.back); // 3 // 予備スペース arr.reserve(1000); writeln(arr.length); // 3 assert(arr.capacity >= 1000); // 挿入 arr.insertBefore(arr[1..$], 1); writeln(arr.front); // 0 writeln(arr.length); // 4 arr.insertBack(4); writeln(arr.back); // 4 writeln(arr.length); // 5 // 要素を設定する arr[1] *= 42; writeln(arr[1]); // 42
import std.algorithm.comparison : equal; auto arr = Array!int(1, 2, 3); // concat auto b = Array!int(11, 12, 13); arr ~= b; writeln(arr.length); // 6 // スライス assert(arr[1 .. 3].equal([2, 3])); // 除去 arr.linearRemove(arr[1 .. 3]); assert(arr[0 .. 2].equal([1, 11]));
auto arr = Array!bool([true, true, false, true, false]); writeln(arr.length); // 5bitビット
- struct
Array
(T) if (!is(immutable(T) == immutable(bool))); - メモリを決定論的に制御する配列型。 配列に割り当てられたメモリはできるだけ早く回収され、 ガベージコレクタに依存することはない。
Array
malloc 、realloc 、freeを 独自のメモリの管理に使用している。つまり、要素へのポインタは、Array
要素が削除されるとすぐに、 ポインタが宙に浮いた状態になるArray
。一方、 によって割り当てられたメモリはArray
GCによってスキャンされ、 GC管理オブジェクトが参照するArray
生存状態が維持されます。注釈 xml-ph-0000@deepl.internalのような範囲ベースの関数と併用する場合は、
Array
std.algorithm のような範囲ベースの関数を使用する場合は、Array
範囲を取得するにはスライスする必要があります(例えば、array.map! の代わりにarray[].map!を使用します )。コンテナ自体は範囲ではありません。- this(U)(U[]
values
...)
if (isImplicitlyConvertible!(U, T));
this(Tsingle
); - 複数のアイテムを受け取るコンストラクタ。
- this(Range)(Range
r
)
if (isInputRange!Range && isImplicitlyConvertible!(ElementType!Range, T) && !is(Range == T[])); - 入力範囲を受け取るコンストラクタ
- const bool
opEquals
(const Arrayrhs
);
const boolopEquals
(const ref Arrayrhs
); - 等価比較。
- alias
Range
= RangeT!Array;
aliasConstRange
= RangeT!(const(Array));
aliasImmutableRange
= RangeT!(immutable(Array)); - 配列の主レンジを定義する。これはランダムアクセス可能なレンジである。
ConstRange
const 個の要素を持つバリアントである。ImmutableRange
immutable 個の要素を持つバリアントである。 - @property Array
dup
(); - 配列を複製する。要素自体は間接的に複製されない。
複雑さ Ο(length)。
- const @property bool
empty
(); - Returns: 配列に要素が含まれていない場合、およびその場合のみ。true 配列に要素が含まれていない場合、およびその場合のみ。
複雑さ Ο(1)
- const @property size_t
length
();
const size_topDollar
(); - Returns: 配列の要素数。配列の要素数。
複雑さ Ο(1)
- @property size_t
capacity
(); - Returns: 配列が挿入時にメモリを再割り当てすることなく、また、イテレータを無効にすることなく格納できる要素の最大数。配列が挿入時にメモリの再割り当てやイテレータの無効化を行わずに格納できる要素の最大数。
複雑さ Ο(1)
- inout @system inout(T)[]
data
(); - Returns: 配列の内部表現。配列の内部表現。
Complexity Ο(1)。
- void
reserve
(size_telements
); - e 要素を収容するのに十分な容量を確保する。e < capacity の場合、このメソッドは何もしない。
事後条件capacity >= e
注釈 要素の容量が増加した場合、 要素へのすべてのイテレータが無効になることを前提とすべきである。
複雑性 最大でΟ(length) e > capacity の場合は、それ以外はΟ(1)。
- Range
opSlice
(); - Returns:配列の要素を順に繰り返す範囲。
複雑さ Ο(1)
- Range
opSlice
(size_ti
, size_tj
); - Returns: 配列の要素を順に繰り返し処理する範囲配列の要素を インデックス
i
最大(除く)インデックスまでj
。前提条件
i
<=j
&&j
<= length複雑性 Ο(1)
- inout @property ref inout(T)
front
(); - Returns: 配列の最初の要素。配列の最初の要素。
前提条件empty == false
複雑さ Ο(1)
- inout @property ref inout(T)
back
(); - Returns: 配列の最後の要素。配列の最後の要素。
前提条件 empty == false
複雑さ Ο(1)
- inout ref inout(T)
opIndex
(size_ti
); - Returns: 指定されたインデックスの要素、またはその要素への参照。指定されたインデックスの要素、またはその要素への参照。
前提条件
i
< length複雑性 Ο(1)
- void
opSliceAssign
(Tvalue
);
voidopSliceAssign
(Tvalue
, size_ti
, size_tj
);
voidopSliceUnary
(string op)()
if (op == "++" || op == "--");
voidopSliceUnary
(string op)(size_ti
, size_tj
)
if (op == "++" || op == "--");
voidopSliceOpAssign
(string op)(Tvalue
);
voidopSliceOpAssign
(string op)(Tvalue
, size_ti
, size_tj
); - スライス全体に対して指定の操作を実行するスライス演算子。
前提条件
i
<j
&&j
< length複雑さ Ο(slice.length)
- Array
opBinary
(string op, Stuff)(Stuffstuff
)
if (op == "~"); - Returns: xml-ph-0000@deepl.internal とその引数を結合した新しい配列。this とその引数を結合した新しい配列。
複雑性 Ο(length + m) ここで、m は
stuff
。 - void
opOpAssign
(string op, Stuff)(auto ref Stuffstuff
)
if (op == "~"); - insertBack に転送する。
- void
clear
(); - 配列からすべての要素を削除し、割り当てられたメモリを解放する。
事後条件empty == true && capacity == 0
複雑さ Ο(length)
- @property void
length
(size_tnewLength
); - 配列の要素数を設定する。
newLength
。 もしnewLength
がlength
場合、新しい要素は配列の最後に追加され、T.init で初期化されます。T がstruct で、そのデフォルト コンストラクタが@disable で注釈されている場合、newLength
またはそれ以下でなければならない。length
。複雑さ 保証Ο(abs(length - newLength)) もし capacity >=
newLength
。 capacity <newLength
最悪の場合、Ο(newLength) である。前提条件 __traits(compiles, { static T _; }) ||
newLength
<=length
事後条件
length
==newLength
- T
removeAny
();
aliasstableRemoveAny
= removeAny; - 配列から最後の要素を削除し、それを返す。 安定版と非安定版の両方で動作は同じであり、 配列を反復する範囲が決して無効にならないことを保証する。
前提条件 empty == false
Returns: 削除された要素。削除された要素。複雑さ Ο(1).
Throws:Exception 配列が空の場合。 - size_t
insertBack
(Stuff)(Stuffstuff
)
if (isImplicitlyConvertible!(Stuff, T) || isInputRange!Stuff && isImplicitlyConvertible!(ElementType!Stuff, T));
aliasinsert
= insertBack; - 指定した要素を配列の末尾に挿入する。
stuff
T に変換できる値、またはT に変換できるオブジェクトの範囲を指定できる。Returns:挿入された要素の数。複雑さ Ο(length + m) 再配置が行われた場合、それ以外はΟ(m) ここで、m は要素の数である
stuff
。 - void
removeBack
();
aliasstableRemoveBack
= removeBack; - 配列の末尾の値を削除する。安定版および非安定版の両方で 同じ動作をし、配列を反復する範囲が 無効になることは決してない。
前提条件 empty == false
複雑さ Ο(1).
Throws:Exception 配列が空の場合。 - size_t
removeBack
(size_thowMany
);
aliasstableRemoveBack
= removeBack; - 配列の末尾から値を削除する。
howMany
配列の末尾から値を削除する。 上記のパラメータ化されていないバージョンとは異なり、これらの関数は 要素を削除できなかった場合でも「スロー」しないhowMany
。代わりに、 もしhowMany
> nすべての要素が削除されます。返り値は 削除された要素の有効な数です。安定版および非安定版の両方で 同じ動作をし、配列を反復する範囲が 無効になることは決してありません。Returns: 削除された要素の数。削除された要素の数。複雑さ Ο(howMany)。
- size_t
insertBefore
(Stuff)(Ranger
, Stuffstuff
)
if (isImplicitlyConvertible!(Stuff, T));
size_tinsertBefore
(Stuff)(Ranger
, Stuffstuff
)
if (isInputRange!Stuff && isImplicitlyConvertible!(ElementType!Stuff, T));
aliasstableInsertBefore
= insertBefore;
size_tinsertAfter
(Stuff)(Ranger
, Stuffstuff
)
if (isImplicitlyConvertible!(Stuff, T) || isInputRange!Stuff && isImplicitlyConvertible!(ElementType!Stuff, T));
size_treplace
(Stuff)(Ranger
, Stuffstuff
)
if (isInputRange!Stuff && isImplicitlyConvertible!(ElementType!Stuff, T));
size_treplace
(Stuff)(Ranger
, Stuffstuff
)
if (isImplicitlyConvertible!(Stuff, T)); stuff
範囲の前、後、またはその代わりに挿入するr
。 これは、この配列から事前に抽出された有効な範囲でなければならない。stuff
T に変換できる値、またはT に変換できるオブジェクトの範囲である。 安定版と非安定版の両方で動作は同じであり、 配列を反復する範囲が決して無効にならないことを保証する。Returns:挿入された値の数。複雑さ Ο(length + m) ここで、m は長さである
stuff
。Throws:Exceptionr
この配列から抽出された範囲ではない場合。- Range
linearRemove
(Ranger
); - に属するすべての要素を削除する。
r
。これは、 もともとこの配列から取得された範囲でなければなりません。Returns: 配列の残りの要素にまたがる範囲で、当初は配列の直後にあったもの配列の残りの要素にまたがる範囲で、 最初はr
。複雑さ Ο(length)
Throws:Exceptionr
この配列から抽出された有効な範囲ではない。
- struct
Array
(T) if (is(immutable(T) == immutable(bool))); - bool に特化した配列。 各要素に1ビットを割り当てることで、値を効率的にまとめる。
- struct
Range
; - 配列の主要な範囲を定義する。
- @property Range
save
();
@property boolempty
();
@property Tfront
();
@property voidfront
(boolvalue
);
TmoveFront
();
voidpopFront
();
@property Tback
();
@property voidback
(boolvalue
);
TmoveBack
();
voidpopBack
();
TopIndex
(size_ti
);
voidopIndexAssign
(Tvalue
, size_ti
);
TmoveAt
(size_ti
);
const @property size_tlength
();
RangeopSlice
(size_tlow
, size_thigh
); - 範囲のプリミティブ
- this(U)(U[]
values
...)
if (isImplicitlyConvertible!(U, T)); - 複数の項目を指定するコンストラクタ。
- this(Range)(Range
r
)
if (isInputRange!Range && isImplicitlyConvertible!(ElementType!Range, T) && !is(Range == T[])); - 入力範囲を受け取るコンストラクタ
- @property bool
empty
(); - 配列に要素が存在しない場合にのみtrue を返すプロパティ。
複雑さ Ο(1)
- @property Array
dup
(); - Returns: 配列の複製。配列の複製。
複雑性 Ο(length)。
- const @property size_t
length
(); - 配列の要素数を返す。
複雑性 Ο(1).
- @property size_t
capacity
(); - Returns: 配列が挿入時にメモリを再割り当てすることなく、またイテレータを無効にすることなく格納できる要素の最大数。配列が挿入時にメモリを再割り当てすることなく、またイテレータを無効にすることなく格納できる要素の最大数。
複雑性 Ο(1)。
- void
reserve
(size_te
); - 要素を格納するのに十分な容量を確保する
e
。 もしe
< capacityこのメソッドは何もしない。事後条件 capacity >=
e
注意 容量を増やした場合、 要素へのすべての反復子は無効になる。注釈 要素の容量を増やした場合、 要素へのすべてのイテレータが無効になるものと想定すべきである。
複雑さ 最大でΟ(length)
e
> capacity、そうでない場合はΟ(1)。 - Range
opSlice
(); - Returns: 配列のすべての要素を順に繰り返す範囲。配列のすべての要素を順に繰り返す範囲。
複雑さ Ο(1)
- Range
opSlice
(size_ta
, size_tb
); - Returns: 配列を2つの指定した位置の間で反復する範囲。指定した2つの位置の間で配列を反復する範囲。
複雑性 Ο(1)
- @property bool
front
();
@property voidfront
(boolvalue
); - Returns: 配列の最初の要素。配列の最初の要素。
前提条件empty == false
複雑さ Ο(1)
Throws:Exception 配列が空の場合。 - @property bool
back
();
@property voidback
(boolvalue
); - Returns: 配列の最後の要素。配列の最後の要素。
前提条件empty == false
複雑さ Ο(1)
Throws:Exception 配列が空の場合。 - bool
opIndex
(size_ti
);
voidopIndexAssign
(boolvalue
, size_ti
);
voidopIndexOpAssign
(string op)(boolvalue
, size_ti
);
TmoveAt
(size_ti
); - 指定したインデックスの値を返す、または変更するインデックス演算子。
前提条件
i
< length複雑さ Ο(1)
- Array!bool
opBinary
(string op, Stuff)(Stuffrhs
)
if (op == "~"); - Returns: xml-ph-0000@deepl.internal とその引数を結合した新しい配列。this とその引数を結合した新しい配列。
複雑性 Ο(length + m) ここで、m はstuff の要素数である。
- Array!bool
opOpAssign
(string op, Stuff)(Stuffstuff
)
if (op == "~"); - insertBack に転送する。
- void
clear
(); - 配列からすべての要素を削除し、割り当てられたメモリを解放する。
事後条件 empty == true && capacity == 0
複雑さ Ο(length)
- @property void
length
(size_tnewLength
); - 配列の要素数を設定する。
newLength
。 もしnewLength
がlength
、新しい要素は配列の末尾に追加され、false で初期化される。複雑性 が保証される。Ο(abs(length - newLength)) capacity >=
newLength
。 もし capacity <newLength
最悪の場合、Ο(newLength) となる。事後条件
length
==newLength
- T
removeAny
();
aliasstableRemoveAny
= removeAny; - 配列から最後の要素を削除し、それを返す。 安定版と非安定版の両方で動作は同じであり、 配列を反復する範囲が決して無効にならないことを保証する。
前提条件 empty == false
Returns: 削除された要素。削除された要素。複雑さ Ο(1).
Throws:Exception 配列が空の場合。 - size_t
insertBack
(Stuff)(Stuffstuff
)
if (is(Stuff : bool));
size_tinsertBack
(Stuff)(Stuffstuff
)
if (isInputRange!Stuff && is(ElementType!Stuff : bool));
aliasstableInsertBack
= insertBack;
aliasinsert
= insertBack;
aliasstableInsert
= insertBack;
aliaslinearInsert
= insertBack;
aliasstableLinearInsert
= insertBack; - 指定した要素を配列の末尾に挿入する。
stuff
bool に変換できる値、またはbool に変換できるオブジェクトの範囲を指定できる。Returns:挿入された要素の数。複雑さ Ο(length + m) 再配置が行われた場合、それ以外はΟ(m) ここで、m は要素の数である
stuff
。 - void
removeBack
();
aliasstableRemoveBack
= removeBack; - 配列の末尾の値を削除する。安定版および非安定版の両方で 同じ動作をし、配列を反復する範囲が 無効になることは決してない。
前提条件 empty == false
複雑さ Ο(1).
Throws:Exception 配列が空の場合。 - size_t
removeBack
(size_thowMany
);
aliasstableRemoveBack
= removeBack; - 配列の末尾から値を削除する。
howMany
配列の末尾から値を削除する。 上記のパラメータ化されていないバージョンとは異なり、これらの関数は 要素を削除できなかった場合に"スロー"しないhowMany
。代わりに、howMany
> n、 すべての要素が削除されます。返される値は、実際に削除された要素の数です。 安定版および非安定版の両方で動作は同じであり、 配列を反復する範囲が決して無効にならないことが保証されています。Returns: 削除された要素の数。削除された要素の数。複雑さ Ο(howMany)。
- size_t
insertBefore
(Stuff)(Ranger
, Stuffstuff
);
aliasstableInsertBefore
= insertBefore;
size_tinsertAfter
(Stuff)(Ranger
, Stuffstuff
)
if (isImplicitlyConvertible!(Stuff, T) || isInputRange!Stuff && isImplicitlyConvertible!(ElementType!Stuff, T));
aliasstableInsertAfter
= insertAfter;
size_treplace
(Stuff)(Ranger
, Stuffstuff
)
if (is(Stuff : bool));
aliasstableReplace
= replace; stuff
範囲の前、後、またはその代わりに挿入するr
。 これは、この配列から事前に抽出された有効な範囲でなければならない。stuff
bool に変換できる値、またはbool に変換できるオブジェクトの範囲である。 安定版と非安定版の両方で動作は同じであり、 配列を反復する範囲が決して無効にならないことを保証する。Returns:挿入された値の数。複雑さ Ο(length + m) ここで、m は長さである
stuff
。- Range
linearRemove
(Ranger
); - に属するすべての要素を削除する。
r
。これは、 この配列から最初に取得した範囲でなければならない。Returns: 配列の残りの要素にまたがる範囲で、当初は配列の直後にあったもの配列の残りの要素にまたがる範囲で、 最初はr
。複雑さ Ο(length)
DEEPL APIにより翻訳、ところどころ修正。
このページの最新版(英語)
このページの原文(英語)
翻訳時のdmdのバージョン: 2.109.1
ドキュメントのdmdのバージョン: 2.109.1
翻訳日付 :
HTML生成日時:
編集者: dokutoku