共用方式為


<cliext/adapter> (STL/CLR)

STL/CLR 標頭 <cliext/adapter> 會指定兩個類別範本 (collection_adapterrange_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);

使用 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