Share via


<cliext/adapter> (STL/CLR)

STL/CLR ヘッダー <cliext/adapter> は、2 つのクラス テンプレート (collection_adapter および) と range_adapter関数テンプレート make_collectionを指定します。

構文

#include <cliext/adapter>

必要条件

ヘッダー:<cliext/numeric>

名前空間cliext:

宣言

クラス 説明
collection_adapter 基本クラス ライブラリ (BCL) コレクションを範囲としてラップします。
range_adapter 範囲を BCL コレクションとしてラップします。
機能 説明
make_collection 反復子ペアを使用して範囲アダプターを作成します。

メンバー

collection_adapter

STL/CLR コンテナーとして使用する .NET コレクションをラップします。 collection_adapter は、単純な STL/CLR コンテナー オブジェクトを記述するテンプレート クラスです。 基本クラス ライブラリ (BCL) インターフェイスをラップし、制御シーケンスの操作に使用する反復子ペアを返します。

構文

template<typename Coll>
    ref class collection_adapter;

template<>
    ref class collection_adapter<
        System::Collections::ICollection>;
template<>
    ref class collection_adapter<
        System::Collections::IEnumerable>;
template<>
    ref class collection_adapter<
        System::Collections::IList>;
template<>
    ref class collection_adapter<
        System::Collections::IDictionary>;
template<typename Value>
    ref class collection_adapter<
        System::Collections::Generic::ICollection<Value>>;
template<typename Value>
    ref class collection_adapter<
        System::Collections::Generic::IEnumerable<Value>>;
template<typename Value>
    ref class collection_adapter<
        System::Collections::Generic::IList<Value>>;
template<typename Key,
    typename Value>
    ref class collection_adapter<
        System::Collections::Generic::IDictionary<Key, Value>>;

パラメーター

Coll
ラップされたコレクションの型。

特殊化

仕様 説明
IEnumerable 要素を介したシーケンス。
ICollection 要素のグループを維持します。
IList 要素の順序付けされたグループを保持します。
IDictionary {key, value} ペアのセットを維持します。
IEnumerable<Value> 型指定された要素を介したシーケンス。
ICollection<Value> 型指定された要素のグループを維持します。
IList<Value> 型指定された要素の順序付けされたグループを維持します。
IDictionary<Value> 型指定された {key, value} ペアのセットを保持します。

メンバー

型定義 説明
collection_adapter::difference_type 2 つの要素間の距離を表す、符号付きの型です。
collection_adapter::iterator 被制御シーケンスの反復子の型です。
collection_adapter::key_type ディクショナリ キーの型。
collection_adapter::mapped_type ディクショナリ キーの値。
collection_adapter::reference 要素への参照の型です。
collection_adapter::size_type 2 つの要素間の距離を表す、符号付きの型です。
collection_adapter::value_type 要素の型。
メンバー関数 説明
collection_adapter::base ラップされた BCL インターフェイスを指定します。
collection_adapter::begin 被制御シーケンスの先頭を指定します。
collection_adapter::collection_adapter アダプター オブジェクトを構築します。
collection_adapter::end 被制御シーケンスの末尾を指定します。
collection_adapter::size 要素の数をカウントします。
collection_adapter::swap 2 つのコンテナーのコンテンツを交換します。
Operator 説明
collection_adapter::operator= 格納されている BCL ハンドルを置き換える。

解説

このテンプレート クラスを使用して、BCL コンテナーを STL/CLR コンテナーとして操作します。 collection_adapter は、BCL インターフェイスにハンドルを格納します。このインターフェイスは、要素のシーケンスを制御します。 collection_adapterオブジェクトXは、入力反復子 X.begin() と、要素を順番にアクセスするために使用する X.end() のペアを返します。 また、一部の特殊化では、制御シーケンスの長さを決定するために X.size() を記述できます。

collection_adapter::base

ラップされた BCL インターフェイスを指定します。

構文

Coll^ base();

解説

このメンバー関数は、格納されている BCL インターフェイス ハンドルを返します。

// cliext_collection_adapter_base.cpp
// compile with: /clr
#include <cliext/adapter>
#include <cliext/deque>

typedef cliext::collection_adapter<
    System::Collections::ICollection> Mycoll;
int main()
    {
    cliext::deque<wchar_t> d6x(6, L'x');
    Mycoll c1(%d6x);

    // display initial contents "x x x x x x "
    for each (wchar_t elem in c1)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    System::Console::WriteLine("base() same = {0}", c1.base() == %c1);
    return (0);
    }
x x x x x x
base() same = True

collection_adapter::begin

被制御シーケンスの先頭を指定します。

構文

iterator begin();

解説

このメンバー関数は、被制御シーケンスの最初の要素 (または空のシーケンスの末尾の次の位置) を指定する入力反復子を返します。

// cliext_collection_adapter_begin.cpp
// compile with: /clr
#include <cliext/adapter>
#include <cliext/deque>

typedef cliext::collection_adapter<
    System::Collections::ICollection> Mycoll;
int main()
{
    cliext::deque<wchar_t> d1;
    d1.push_back(L'a');
    d1.push_back(L'b');
    d1.push_back(L'c');
    Mycoll c1(%d1);

    // display initial contents "a b c "
    for each (wchar_t elem in c1)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // inspect first two items
    Mycoll::iterator it = c1.begin();
    System::Console::WriteLine("*begin() = {0}", *it);
    System::Console::WriteLine("*++begin() = {0}", *++it);
    return (0);
}
a b c
*begin() = a
*++begin() = b

collection_adapter::collection_adapter

アダプター オブジェクトを構築します。

構文

collection_adapter();
collection_adapter(collection_adapter<Coll>% right);
collection_adapter(collection_adapter<Coll>^ right);
collection_adapter(Coll^ collection);

パラメーター

collection
ラップする BCL ハンドル。

right
コピーするオブジェクト。

解説

コンストラクター:

collection_adapter();

格納されているハンドルを nullptr で初期化します。

コンストラクター:

collection_adapter(collection_adapter<Coll>% right);

格納されているハンドルを right.base() で初期化します。

コンストラクター:

collection_adapter(collection_adapter<Coll>^ right);

格納されているハンドルを right->base() で初期化します。

コンストラクター:

collection_adapter(Coll^ collection);

格納されているハンドルを collection で初期化します。

// cliext_collection_adapter_construct.cpp
// compile with: /clr
#include <cliext/adapter>
#include <cliext/deque>

typedef cliext::collection_adapter<
    System::Collections::ICollection> Mycoll;
int main()
{
    cliext::deque<wchar_t> d6x(6, L'x');

    // construct an empty container
    Mycoll c1;
    System::Console::WriteLine("base() null = {0}", c1.base() == nullptr);

    // construct with a handle
    Mycoll c2(%d6x);
    for each (wchar_t elem in c2)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // construct by copying another container
    Mycoll c3(c2);
    for each (wchar_t elem in c3)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // construct by copying a container handle
    Mycoll c4(%c3);
    for each (wchar_t elem in c4)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    return (0);
}
base() null = True
x x x x x x
x x x x x x
x x x x x x

collection_adapter::difference_type

2 つの要素間の符号付きの距離を表す型です。

構文

typedef int difference_type;

解説

この型は、署名された要素の数を表します。

// cliext_collection_adapter_difference_type.cpp
// compile with: /clr
#include <cliext/adapter>
#include <cliext/deque>

typedef cliext::collection_adapter<
    System::Collections::ICollection> Mycoll;
int main()
{
    cliext::deque<wchar_t> d1;
    d1.push_back(L'a');
    d1.push_back(L'b');
    d1.push_back(L'c');
    Mycoll c1(%d1);

    // display initial contents "a b c "
    for each (wchar_t elem in c1)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // compute positive difference
    Mycoll::difference_type diff = 0;
    Mycoll::iterator it = c1.begin();
    for (; it != c1.end(); ++it)
        ++diff;
    System::Console::WriteLine("end()-begin() = {0}", diff);
    return (0);
}
a b c
end()-begin() = 3

collection_adapter::end

被制御シーケンスの末尾を指定します。

構文

iterator end();

解説

このメンバー関数は、被制御シーケンスの末尾の次の位置を示す入力反復子を返します。

// cliext_collection_adapter_end.cpp
// compile with: /clr
#include <cliext/adapter>
#include <cliext/deque>

typedef cliext::collection_adapter<
    System::Collections::ICollection> Mycoll;
int main()
{
    cliext::deque<wchar_t> d1;
    d1.push_back(L'a');
    d1.push_back(L'b');
    d1.push_back(L'c');
    Mycoll c1(%d1);

    // display initial contents "a b c "
    Mycoll::iterator it = c1.begin();
    for (; it != c1.end(); ++it)
        System::Console::Write("{0} ", *it);
    System::Console::WriteLine();
    return (0);
}
a b c

collection_adapter::iterator

被制御シーケンスの反復子の型です。

構文

typedef T1 iterator;

解説

この型は、被制御シーケンスの入力反復子として使用できる未指定の T1 型のオブジェクトを表します。

// cliext_collection_adapter_iterator.cpp
// compile with: /clr
#include <cliext/adapter>
#include <cliext/deque>

typedef cliext::collection_adapter<
    System::Collections::ICollection> Mycoll;
int main()
{
    cliext::deque<wchar_t> d1;
    d1.push_back(L'a');
    d1.push_back(L'b');
    d1.push_back(L'c');
    Mycoll c1(%d1);

    // display initial contents "a b c "
    Mycoll::iterator it = c1.begin();
    for (; it != c1.end(); ++it)
        System::Console::Write("{0} ", *it);
    System::Console::WriteLine();
    return (0);
}
a b c

collection_adapter::key_type

ディクショナリ キーの型。

構文

typedef Key key_type;

解説

型はテンプレート パラメーターKeyのシノニムであり、特殊化IDictionaryIDictionary<Value>では定義されていません。それ以外の場合は定義されていません。

// cliext_collection_adapter_key_type.cpp
// compile with: /clr
#include <cliext/adapter>
#include <cliext/map>

typedef cliext::map<wchar_t, int> Mymap;
typedef cliext::collection_adapter<
    System::Collections::Generic::IDictionary<wchar_t, int>> Mycoll;
typedef System::Collections::Generic::KeyValuePair<wchar_t,int> Mypair;
int main()
{
    Mymap d1;
    d1.insert(Mymap::make_value(L'a', 1));
    d1.insert(Mymap::make_value(L'b', 2));
    d1.insert(Mymap::make_value(L'c', 3));
    Mycoll c1(%d1);

    // display contents "[a 1] [b 2] [c 3] "
    for each (Mypair elem in c1)
    {
        Mycoll::key_type key = elem.Key;
        Mycoll::mapped_type value = elem.Value;
        System::Console::Write("[{0} {1}] ", key, value);
    }
    System::Console::WriteLine();
    return (0);
}
[a 1] [b 2] [c 3]

collection_adapter::mapped_type

ディクショナリ キーの値。

構文

typedef Value mapped_type;

解説

型はテンプレート パラメーターValueのシノニムであり、特殊化IDictionaryIDictionary<Value>では定義されていません。それ以外の場合は定義されていません。

// cliext_collection_adapter_mapped_type.cpp
// compile with: /clr
#include <cliext/adapter>
#include <cliext/map>

typedef cliext::map<wchar_t, int> Mymap;
typedef cliext::collection_adapter<
    System::Collections::Generic::IDictionary<wchar_t, int>> Mycoll;
typedef System::Collections::Generic::KeyValuePair<wchar_t,int> Mypair;
int main()
{
    Mymap d1;
    d1.insert(Mymap::make_value(L'a', 1));
    d1.insert(Mymap::make_value(L'b', 2));
    d1.insert(Mymap::make_value(L'c', 3));
    Mycoll c1(%d1);

    // display contents "[a 1] [b 2] [c 3] "
    for each (Mypair elem in c1)
    {
        Mycoll::key_type key = elem.Key;
        Mycoll::mapped_type value = elem.Value;
        System::Console::Write("[{0} {1}] ", key, value);
    }
    System::Console::WriteLine();
    return (0);
}
[a 1] [b 2] [c 3]

collection_adapter::operator=

格納されている BCL ハンドルを置き換える。

構文

collection_adapter<Coll>% operator=(collection_adapter<Coll>% right);

パラメーター

right
コピーするアダプター。

解説

メンバー演算子は、オブジェクトにコピー right し、次に返します *this。 これを使用して、格納された BCL ハンドルを格納された BCL ハンドルのコピーに right置き換えます。

// cliext_collection_adapter_operator_as.cpp
// compile with: /clr
#include <cliext/adapter>
#include <cliext/deque>

typedef cliext::collection_adapter<
    System::Collections::ICollection> Mycoll;
int main()
{
    cliext::deque<wchar_t> d1;
    d1.push_back(L'a');
    d1.push_back(L'b');
    d1.push_back(L'c');
    Mycoll c1(%d1);

    // display initial contents "a b c "
    for each (wchar_t elem in c1)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // assign to a new container
    Mycoll c2;
    c2 = c1;
    for each (wchar_t elem in c2)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();
    return (0);
}
a b c
a b c

collection_adapter::reference

要素への参照の型です。

構文

typedef value_type% reference;

解説

この型は、要素への参照を表します。

// cliext_collection_adapter_reference.cpp
// compile with: /clr
#include <cliext/adapter>
#include <cliext/deque>

typedef cliext::collection_adapter<
    System::Collections::ICollection> Mycoll;
int main()
    {
    cliext::deque<wchar_t> d1;
    d1.push_back(L'a');
    d1.push_back(L'b');
    d1.push_back(L'c');
    Mycoll c1(%d1);

    // display initial contents "a b c "
    Mycoll::iterator it = c1.begin();
    for (; it != c1.end(); ++it)
    {   // get a reference to an element
        Mycoll::reference ref = *it;
        System::Console::Write("{0} ", ref);
    }
    System::Console::WriteLine();
    return (0);
}
a b c

collection_adapter::size

要素の数をカウントします。

構文

size_type size();

解説

このメンバー関数は、被制御シーケンスの長さを返します。 これは特殊化IEnumerableIEnumerable<Value>で定義されていません。

// cliext_collection_adapter_size.cpp
// compile with: /clr
#include <cliext/adapter>
#include <cliext/deque>

typedef cliext::collection_adapter<
    System::Collections::ICollection> Mycoll;
int main()
{
    cliext::deque<wchar_t> d6x(6, L'x');
    Mycoll c1(%d6x);

    // display initial contents "x x x x x x "
    for each (wchar_t elem in c1)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();
    System::Console::WriteLine("size() = {0}", c1.size());
    return (0);
}
x x x x x x
size() = 6

collection_adapter::size_type

2 つの要素間の距離を表す、符号付きの型です。

構文

typedef int size_type;

解説

この型は、負でない要素数を表します。

// cliext_collection_adapter_size_type.cpp
// compile with: /clr
#include <cliext/adapter>
#include <cliext/deque>

typedef cliext::collection_adapter<
    System::Collections::ICollection> Mycoll;
int main()
{
    cliext::deque<wchar_t> d6x(6, L'x');
    Mycoll c1(%d6x);

    // display initial contents "x x x x x x"
    for each (wchar_t elem in c1)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    Mycoll::size_type size = c1.size();
    System::Console::WriteLine("size() = {0}", size);
    return (0);
}
x x x x x x
size() = 6

collection_adapter::swap

2 つのコンテナーのコンテンツを交換します。

構文

void swap(collection_adapter<Coll>% right);

パラメーター

right
コンテンツを交換するコンテナー。

解説

メンバー関数は、格納されている BCL ハンドル*thisrightを入れ替えます。

// cliext_collection_adapter_swap.cpp
// compile with: /clr
#include <cliext/adapter>
#include <cliext/deque>

typedef cliext::collection_adapter<
    System::Collections::ICollection> Mycoll;
int main()
{
    cliext::deque<wchar_t> d1;
    d1.push_back(L'a');
    d1.push_back(L'b');
    d1.push_back(L'c');
    Mycoll c1(%d1);

    // display initial contents " a b c"
    for each (wchar_t elem in c1)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // construct another container with repetition of values
    cliext::deque<wchar_t> d2(5, L'x');
    Mycoll c2(%d2);
    for each (wchar_t elem in c2)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // swap and redisplay
    c1.swap(c2);
    for each (wchar_t elem in c1)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    for each (wchar_t elem in c2)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();
    return (0);
}
a b c
x x x x x
x x x x x
a b c

collection_adapter::value_type

要素の型。

構文

typedef Value value_type;

解説

型は、特殊化に存在する場合はテンプレート パラメーター Valueのシノニム System::Object^です。それ以外の場合は 、

// cliext_collection_adapter_value_type.cpp
// compile with: /clr
#include <cliext/adapter>
#include <cliext/deque>

typedef cliext::collection_adapter<
    System::Collections::ICollection> Mycoll;
int main()
{
    cliext::deque<wchar_t> d1;
    d1.push_back(L'a');
    d1.push_back(L'b');
    d1.push_back(L'c');
    Mycoll c1(%d1);

    // display contents "a b c" using value_type
    for (Mycoll::iterator it = c1.begin();
        it != c1.end(); ++it)
    {   // store element in value_type object
        Mycoll::value_type val = *it;

        System::Console::Write("{0} ", val);
    }
    System::Console::WriteLine();
    return (0);
}
a b c

make_collection (STL/CLR)

反復子ペアからを range_adapter 作成します。

構文

template<typename Iter>
    range_adapter<Iter> make_collection(Iter first, Iter last);

パラメーター

Iter
ラップされた反復子の型。

first
ラップする最初の反復子。

last
ラップする 2 番目の反復子。

解説

関数テンプレートが返します gcnew range_adapter<Iter>(first, last)。 反復子のペアから range_adapter<Iter> オブジェクトを構築するために使用します。

// cliext_make_collection.cpp
// compile with: /clr
#include <cliext/adapter>
#include <cliext/deque>

typedef cliext::deque<wchar_t> Mycont;
typedef cliext::range_adapter<Mycont::iterator> Myrange;
int main()
{
    cliext::deque<wchar_t> d1;
    d1.push_back(L'a');
    d1.push_back(L'b');
    d1.push_back(L'c');

    // display contents " a b c"
    for each (wchar_t elem in d1)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    System::Collections::ICollection^ p1 =
        cliext::make_collection(d1.begin(), d1.end());
    System::Console::WriteLine("Count = {0}", p1->Count);
    System::Console::WriteLine("IsSynchronized = {0}",
        p1->IsSynchronized);
    System::Console::WriteLine("SyncRoot not nullptr = {0}",
        p1->SyncRoot != nullptr);

    // copy the sequence
    cli::array<System::Object^>^ a1 = gcnew cli::array<System::Object^>(5);

    a1[0] = L'|';
    p1->CopyTo(a1, 1);
    a1[4] = L'|';
    for each (wchar_t elem in a1)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    return (0);
}
a b c
Count = 3
IsSynchronized = False
SyncRoot not nullptr = True
| a b c |

range_adapter (STL/CLR)

複数の基本クラスライブラリ (BCL) インターフェイスを実装するために使用される反復子のペアをラップするテンプレート クラス。 range_adapterを使用して、STL/CLR 範囲を BCL コレクションであるかのように操作します。

構文

template<typename Iter>
    ref class range_adapter
        :   public
        System::Collections::IEnumerable,
        System::Collections::ICollection,
        System::Collections::Generic::IEnumerable<Value>,
        System::Collections::Generic::ICollection<Value>
    { ..... };

パラメーター

Iter
ラップされた反復子に関連付けられた型。

メンバー

メンバー関数 説明
range_adapter::range_adapter アダプター オブジェクトを構築します。
Operator 説明
range_adapter::operator= 格納されている反復子のペアを置き換えます。

インターフェイス

インターフェイス 説明
IEnumerable コレクション内の要素を反復処理します。
ICollection 要素のグループを維持します。
IEnumerable<T> コレクション内の型指定された要素を反復処理します。
ICollection<T> 型指定された要素のグループを維持します。

解説

Range_adapter は、要素のシーケンスを順番に区切る反復子のペアを格納します。 オブジェクトには、要素を順番に反復処理できる 4 つの BCL インターフェイスが実装されています。 このテンプレート クラスを使用して、BCL コンテナーと同じように STL/CLR 範囲を操作します。

range_adapter::operator=

格納されている反復子のペアを置き換えます。

構文

range_adapter<Iter>% operator=(range_adapter<Iter>% right);

パラメーター

right
コピーするアダプター。

解説

メンバー演算子は、オブジェクトにコピー right し、次に返します *this。 これを使用して、格納されている反復子のペアを格納されている反復子ペアのコピーに right置き換えます。

// cliext_range_adapter_operator_as.cpp
// compile with: /clr
#include <cliext/adapter>
#include <cliext/deque>

typedef cliext::deque<wchar_t> Mycont;
typedef cliext::range_adapter<Mycont::iterator> Myrange;
int main()
{
    cliext::deque<wchar_t> d1;
    d1.push_back(L'a');
    d1.push_back(L'b');
    d1.push_back(L'c');
    Myrange c1(d1.begin(), d1.end());

    // display contents " a b c"
    for each (wchar_t elem in c1)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // assign to a new container
    Myrange c2;
    c2 = c1;
    for each (wchar_t elem in c2)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();
    return (0);
}
a b c
a b c

range_adapter::range_adapter

アダプター オブジェクトを構築します。

構文

range_adapter();
range_adapter(range_adapter<Iter>% right);
range_adapter(range_adapter<Iter>^ right);
range_adapter(Iter first, Iter last);

パラメーター

first
ラップする最初の反復子。

last
ラップする 2 番目の反復子。

right
コピーするオブジェクト。

解説

コンストラクター:

range_adapter();

既定の構築反復子を使用して、格納された反復子ペアを初期化します。

コンストラクター:

range_adapter(range_adapter<Iter>% right);

right に格納されているペアをコピーすることにより、格納された反復子ペアを初期化します。

コンストラクター:

range_adapter(range_adapter<Iter>^ right);

*right に格納されているペアをコピーすることにより、格納された反復子ペアを初期化します。

コンストラクター:

range_adapter(Iter^ first, last);

を使用して、格納されている反復子のペアをfirstlast初期化します。

// cliext_range_adapter_construct.cpp
// compile with: /clr
#include <cliext/adapter>
#include <cliext/deque>

typedef cliext::deque<wchar_t> Mycont;
typedef cliext::range_adapter<Mycont::iterator> Myrange;
int main()
{
    cliext::deque<wchar_t> d1;
    d1.push_back(L'a');
    d1.push_back(L'b');
    d1.push_back(L'c');

    // construct an empty adapter
    Myrange c1;

    // construct with an iterator pair
    Myrange c2(d1.begin(), d1.end());
    for each (wchar_t elem in c2)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // construct by copying another adapter
    Myrange c3(c2);
    for each (wchar_t elem in c3)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // construct by copying an adapter handle
    Myrange c4(%c3);
    for each (wchar_t elem in c4)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    return (0);
}
a b c
a b c
a b c