<cliext/adapter>
(STL/CLR)
STL/CLR 標頭 <cliext/adapter>
會指定兩個類別範本 (collection_adapter
和 range_adapter
),以及函式範本 make_collection
。
語法
#include <cliext/adapter>
需求
標頭:<cliext/adapter>
命名空間:cliext
宣告
類別 | 描述 |
---|---|
collection_adapter |
將基類庫 (BCL) 集合包裝為範圍。 |
range_adapter |
將範圍包裝為 BCL 集合。 |
函式 | 描述 |
---|---|
make_collection |
使用反覆運算器組建立範圍配接器。 |
成員
collection_adapter
包裝 .NET 集合,以做為 STL/CLR 容器使用。 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 |
兩個項目之間帶正負號距離的類型。 |
collection_adapter::iterator |
受控制序列之迭代器的類型。 |
collection_adapter::key_type |
字典索引鍵的類型。 |
collection_adapter::mapped_type |
字典值的型別。 |
collection_adapter::reference |
項目的參考類型。 |
collection_adapter::size_type |
兩個項目之間帶正負號距離的類型。 |
collection_adapter::value_type |
元素的類型。 |
成員函數 | 描述 |
---|---|
collection_adapter::base |
指定包裝的 BCL 介面。 |
collection_adapter::begin |
指定受控制序列的開頭。 |
collection_adapter::collection_adapter |
建構配接器物件。 |
collection_adapter::end |
指定受控制序列的結尾。 |
collection_adapter::size |
計算元素的數目。 |
collection_adapter::swap |
交換兩個容器的內容。 |
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
兩個項目之間帶正負號距離的類型。
語法
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
同義,在 或IDictionary<Value>
的特製化IDictionary
中為 ,否則不會定義。
範例
// 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
同義,在 或IDictionary<Value>
的特製化IDictionary
中為 ,否則不會定義。
範例
// 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<Value>
的特製化IEnumerable
中定義。
範例
// 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
兩個項目之間帶正負號距離的類型。
語法
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
交換兩個容器的內容。
語法
void swap(collection_adapter<Coll>% right);
參數
right
要交換內容的容器。
備註
成員函式會在和 right
之間*this
交換儲存的 BCL 句柄。
範例
// 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
要包裝的第二個反覆運算器。
備註
函式範本會傳 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會儲存一組反覆運算器,進而分隔元素序列。 物件會實作四個 BCL 介面,讓您依序逐一查看元素。 您可以使用此範本類別來操作 STL/CLR 範圍,就像 BCL 容器一樣。
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
要包裝的第二個反覆運算器。
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