英語版
このページの英語版を見る

std.container.util

このモジュールには、コンテナで使用されるいくつかの一般的なユーティリティが含まれている。
このモジュールは、のサブモジュールである std.container
License:
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:
Andrei Alexandrescu
template make(T) if (is(T == struct) || is(T == class))
初期化されたオブジェクトを返す。この関数は主に、 構造体とクラスの間の構築の違いをなくすためにある。この関数により、コードは 構築中の型が構造体かクラスかを気にしなくて済む。
Examples:
import std.algorithm.comparison : equal;
import std.container;

auto arr = make!(Array!int)([4, 2, 3, 1]);
assert(equal(arr[], [4, 2, 3, 1]));

auto rbt = make!(RedBlackTree!(int, "a > b"))([4, 2, 3, 1]);
assert(equal(rbt[], [4, 3, 2, 1]));

alias makeList = make!(SList!int);
auto slist = makeList(1, 2, 3);
assert(equal(slist[], [1, 2, 3]));
template make(alias Container, Args...) if (!is(Container))
汎用コンテナを構築するための便利な関数。
Examples: 無限の範囲からの構築を禁止する
無限の範囲からの構築を禁止する
import std.container.array : Array;
import std.range : only, repeat;
import std.range.primitives : isInfinite;
static assert(__traits(compiles, { auto arr = make!Array(only(5)); }));
static assert(!__traits(compiles, { auto arr = make!Array(repeat(5)); }));
containercontainer
Examples:
import std.algorithm.comparison : equal;
import std.container.array, std.container.rbtree, std.container.slist;
import std.range : iota;

auto arr = make!Array(iota(5));
assert(equal(arr[], [0, 1, 2, 3, 4]));

auto rbtmax = make!(RedBlackTree, "a > b")(iota(5));
assert(equal(rbtmax[], [4, 3, 2, 1, 0]));

auto rbtmin = make!RedBlackTree(4, 1, 3, 2);
assert(equal(rbtmin[], [1, 2, 3, 4]));

alias makeList = make!SList;
auto list = makeList(1, 7, 42);
assert(equal(list[], [1, 7, 42]));
range範囲