英語版
このページの英語版を見る
std.container.dlist
このモジュールは、汎用的な双方向リンクリストコンテナを実装する。
キュー、デキュー、スタックとして使用できる。
このモジュールは、 std.container。
ソースソースstd/container/dlist.d sourceソース
License:
sourceソースDistributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at boost.org/LICENSE_1_0.txt).
Authors:
sourceソースExamples:
import std.algorithm.comparison : equal; import std.container : DList; auto s = DList!int(1, 2, 3); assert(equal(s[], [1, 2, 3])); s.removeFront(); assert(equal(s[], [2, 3])); s.removeBack(); assert(equal(s[], [2])); s.insertFront([4, 5]); assert(equal(s[], [4, 5, 2])); s.insertBack([6, 7]); assert(equal(s[], [4, 5, 2, 6, 7])); // 範囲操作を適用したい場合は、単純にスライスする。 import std.algorithm.searching : countUntil; import std.range : popFrontN, popBackN, walkLength; auto sl = DList!int([1, 2, 3, 4, 5]); writeln(countUntil(sl[], 2)); // 1 auto r = sl[]; popFrontN(r, 2); popBackN(r, 2); assert(r.equal([3])); writeln(walkLength(r)); // 1 // DList.Rangeは、spanリストから要素を削除するために使用できる auto nl = DList!int([1, 2, 3, 4, 5]); for (auto rn = nl[]; !rn.empty;) if (rn.front % 2 == 0) nl.popFirstOf(rn); else rn.popFront(); assert(equal(nl[], [1, 3, 5])); auto rs = nl[]; rs.popFront(); nl.remove(rs); assert(equal(nl[], [1]));
- struct
DList
(T); - 双方向リンクリストを実装する。
DList
参照セマンティクスを使用する。- this(U)(U[]
values
...)
if (isImplicitlyConvertible!(U, T)); - 複数のノードを受け取るコンストラクタ
- this(Stuff)(Stuff
stuff
)
if (isInputRange!Stuff && isImplicitlyConvertible!(ElementType!Stuff, T)); - 入力範囲を受け取るコンストラクタ
- const bool
opEquals
()(const ref DListrhs
)
if (is(typeof(front == front))); - 等価性の比較。
複雑さ Ο(min(n, n1)) ここで、n1 は 要素の数である
rhs
。 - struct
Range
; - コンテナの主たる範囲を定義し、双方向の範囲を体現する。
- const nothrow @property bool
empty
(); - コンテナに要素が含まれていない場合にのみ、true を返すプロパティ。
複雑性 Ο(1)
- void
clear
(); - DList からすべてのコンテンツを削除する。
事後条件empty
複雑性 Ο(1)
- @property DList
dup
(); - コンテナを複製する。要素自体は間接的に複製されない。
複雑度 Ο(n)。
- Range
opSlice
(); - コンテナのすべての要素を順に繰り返す範囲を返す。 順序は
複雑性 Ο(1)
- inout @property ref inout(T)
front
(); - 次へ opSlice().
front
。複雑性 Ο(1)
- inout @property ref inout(T)
back
(); - 転送する opSlice().
back
。Complexity Ο(1)
- DList
opBinary
(string op, Stuff)(Stuffrhs
)
if (op == "~" && is(typeof(insertBack(rhs
)))); - this と引数を連結した新しいDList を返す
rhs
。 - DList
opBinaryRight
(string op, Stuff)(Stufflhs
)
if (op == "~" && is(typeof(insertFront(lhs
)))); - 引数とDList を連結した新しい を返す
lhs
this を連結したものを返します。 - DList
opOpAssign
(string op, Stuff)(Stuffrhs
)
if (op == "~" && is(typeof(insertBack(rhs
)))); - 引数の内容を
rhs
this に追加する。 - size_t
insertFront
(Stuff)(Stuffstuff
);
size_tinsertBack
(Stuff)(Stuffstuff
);
aliasinsert
= insertBack;
aliasstableInsert
= insert;
aliasstableInsertFront
= insertFront;
aliasstableInsertBack
= insertBack; - コンテナの
stuff
コンテナの前方または後方に挿入する。stuff
値は、T に変換できる値、またはT に変換できるオブジェクトの範囲である。安定版も同様に動作するが、 コンテナを反復する範囲が決して無効にならないことを保証する。Returns:挿入される要素の数複雑さ Ο(log(n))
- size_t
insertBefore
(Stuff)(Ranger
, Stuffstuff
);
aliasstableInsertBefore
= insertBefore;
size_tinsertAfter
(Stuff)(Ranger
, Stuffstuff
);
aliasstableInsertAfter
= insertAfter; stuff
範囲の後ろに挿入するr
、これは 事前にこのコンテナから抽出された空ではない範囲でなければならない。stuff
T に変換できる値、またはT に変換できるオブジェクトの範囲 である。安定版も同様に動作するが、 コンテナを反復処理する範囲が決して無効にならないことを保証する。Returns:挿入された値の数。複雑さ Ο(k + m) ここで、k は要素の数であり
r
、m は長さである。stuff
。- T
removeAny
();
aliasstableRemoveAny
= removeAny; - コンテナ内の不特定の位置にある値を1つ選択し、 コンテナからそれを削除し、それを返す。安定版の動作も同じだが、 コンテナを反復する範囲が決して無効にならないことが保証される。
前提条件 !empty
Returns: 要素が削除された。要素が削除された。複雑性 Ο(1)。
- void
removeFront
();
aliasstableRemoveFront
= removeFront;
voidremoveBack
();
aliasstableRemoveBack
= removeBack; - コンテナの前/後ろの値を削除する。安定版は 同様に動作するが、コンテナを反復する範囲が 無効化されることは決してないことを保証する。
前提条件!empty
複雑さ Ο(1)。
- size_t
removeFront
(size_thowMany
);
aliasstableRemoveFront
= removeFront;
size_tremoveBack
(size_thowMany
);
aliasstableRemoveBack
= removeBack; howMany
コンテナの最初または最後の値を削除する。 上記のパラメータ化されていないバージョンとは異なり、これらの関数は 要素を削除できなかった場合に"スロー"しないhowMany
代わりに、howMany > n の場合、すべての要素が削除される。返される値は 削除された要素の有効な数である。安定版も同様に動作するが、 コンテナを反復処理する範囲が 無効になることは決してない。Returns:削除された要素の数複雑さ Ο(howMany).
- Range
remove
(Ranger
);
RangelinearRemove
(Ranger
);
aliasstableRemove
= remove; - に属するすべての要素を削除する。
r
。これは、 もともとこのコンテナから取得した範囲でなければならない。Returns:コンテナ内の残りの要素にまたがる範囲で、 最初はr
。複雑性 Ο(1)
- void
popFirstOf
(ref Ranger
); - 最初の要素を削除する
r
。これは、もともと このコンテナから取得された範囲である必要があり、DListインスタンスと範囲の両方からr
。複雑度 Ο(1)
- void
popLastOf
(ref Ranger
); - 最後の要素を削除する
r
。これは、このコンテナから取得された範囲でなければならず、 DListインスタンスと範囲の両方から取得されるr
。複雑性 Ο(1)
- Range
linearRemove
(Take!Ranger
);
aliasstableLinearRemove
= linearRemove; linearRemove
remove として機能するが、take 操作の結果である範囲も受け入れる。 これは、範囲から一定の要素を削除する便利な方法である。複雑さ Ο(r.walkLength)
- bool
linearRemoveElement
(Tvalue
); - リストから最初の要素を線形時間で削除する。Returns:要素が存在し、正常に削除された場合は真、そうでない場合は偽。Parameters:
T value
削除されるノードの値 複雑さ Ο(n)
Copyright © 1999-2024 by the D Language Foundation
DEEPL APIにより翻訳、ところどころ修正。
このページの最新版(英語)
このページの原文(英語)
翻訳時のdmdのバージョン: 2.109.1
ドキュメントのdmdのバージョン: 2.109.1
翻訳日付 :
HTML生成日時:
編集者: dokutoku