<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;
解説
型は、IDictionary
またはIDictionary<Value>
の特殊化において、テンプレート パラメーター Key
のシノニムです。それ以外の場合は定義されていません。
例
// 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;
解説
型は、IDictionary
またはIDictionary<Value>
の特殊化において、テンプレート パラメーター 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 ハンドルを、 right
に格納されている BCL ハンドルのコピーに置き換えます。
例
// 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();
解説
このメンバー関数は、被制御シーケンスの長さを返します。 IEnumerable
またはIEnumerable<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 ハンドルを *this
と right
の間でスワップします。
例
// 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);
は、 first
と last
を使用して、格納されている反復子のペアを初期化します。
例
// 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