<cliext/adapter>
(STL/CLR)
Hlavička <cliext/adapter>
STL/CLR určuje dvě šablony tříd (collection_adapter
a range_adapter
) a šablonu make_collection
funkce .
Syntaxe
#include <cliext/adapter>
Požadavky
Header:<cliext/adapter>
Obor názvů: cliext
Deklarace
Třída | Popis |
---|---|
collection_adapter |
Zabalí kolekci BCL (Base Class Library) jako rozsah. |
range_adapter |
Zabalí rozsah jako kolekci seznamu BCL. |
Function | Popis |
---|---|
make_collection |
Vytvoří adaptér rozsahu pomocí páru iterátoru. |
Členové
collection_adapter
Zabalí kolekci .NET pro použití jako kontejner STL/CLR. A collection_adapter
je třída šablony, která popisuje jednoduchý objekt kontejneru STL/CLR. Zabalí rozhraní knihovny základních tříd (BCL) a vrátí dvojici iterátoru, kterou použijete k manipulaci s řízenou sekvencí.
Syntaxe
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>>;
Parametry
Coll
Typ zabalené kolekce.
Specializace
Specializace | Popis |
---|---|
IEnumerable |
Sekvencuje prvky. |
ICollection |
Udržuje skupinu prvků. |
IList |
Udržuje uspořádanou skupinu prvků. |
IDictionary |
Udržujte sadu párů {klíč, hodnota}. |
IEnumerable<Value> |
Sekvencuje přes typové prvky. |
ICollection<Value> |
Udržuje skupinu typových prvků. |
IList<Value> |
Udržuje uspořádanou skupinu typových prvků. |
IDictionary<Value> |
Udržuje sadu párů typu {key, value}. |
Členové
Definice typu | Popis |
---|---|
collection_adapter::difference_type |
Typ vzdálenosti se znaménkem mezi dvěma prvky |
collection_adapter::iterator |
Typ iterátoru řízené sekvence |
collection_adapter::key_type |
Typ klíče slovníku. |
collection_adapter::mapped_type |
Typ hodnoty slovníku. |
collection_adapter::reference |
Typ odkazu na prvek |
collection_adapter::size_type |
Typ vzdálenosti se znaménkem mezi dvěma prvky |
collection_adapter::value_type |
Typ prvku |
Členová funkce | Popis |
---|---|
collection_adapter::base |
Určuje zabalené rozhraní BCL. |
collection_adapter::begin |
Určuje začátek řízené sekvence. |
collection_adapter::collection_adapter |
Vytvoří objekt adaptéru. |
collection_adapter::end |
Určuje konec řízené sekvence. |
collection_adapter::size |
Spočítá počet prvků. |
collection_adapter::swap |
Zamění obsah dvou kontejnerů. |
Operátor | Popis |
---|---|
collection_adapter::operator= |
Nahradí uložený popisovač seznamu BCL. |
Poznámky
Tuto třídu šablony použijete k manipulaci s kontejnerem seznamu BCL jako kontejneru STL/CLR. Ukládá collection_adapter
popisovač rozhraní BCL, které pak řídí posloupnost prvků. Objekt collection_adapter
X
vrátí dvojici vstupních iterátorů X.begin()
a X.end()
které použijete k návštěvě prvků v pořadí. Některé specializace také umožňují napsat X.size()
, abyste určili délku řízené sekvence.
collection_adapter::base
Určuje zabalené rozhraní BCL.
Syntaxe
Coll^ base();
Poznámky
Členová funkce vrátí uložený popisovač rozhraní BCL.
Příklad
// 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
Určuje začátek řízené sekvence.
Syntaxe
iterator begin();
Poznámky
Členová funkce vrátí vstupní iterátor, který určuje první prvek řízené sekvence nebo těsně za koncem prázdné sekvence.
Příklad
// 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
Vytvoří objekt adaptéru.
Syntaxe
collection_adapter();
collection_adapter(collection_adapter<Coll>% right);
collection_adapter(collection_adapter<Coll>^ right);
collection_adapter(Coll^ collection);
Parametry
collection
Popisovač seznamu BCL, který se má zabalit.
right
Objekt, který chcete kopírovat.
Poznámky
Konstruktor:
collection_adapter();
inicializuje uložený popisovač pomocí nullptr
.
Konstruktor:
collection_adapter(collection_adapter<Coll>% right);
inicializuje uložený popisovač pomocí right.base()
.
Konstruktor:
collection_adapter(collection_adapter<Coll>^ right);
inicializuje uložený popisovač pomocí right->base()
.
Konstruktor:
collection_adapter(Coll^ collection);
inicializuje uložený popisovač pomocí collection
.
Příklad
// 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
Typy podepsané vzdálenosti mezi dvěma prvky.
Syntaxe
typedef int difference_type;
Poznámky
Typ popisuje počet podepsaných prvků.
Příklad
// 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
Určuje konec řízené sekvence.
Syntaxe
iterator end();
Poznámky
Členová funkce vrátí vstupní iterátor, který odkazuje těsně za koncem řízené sekvence.
Příklad
// 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
Typ iterátoru řízené sekvence
Syntaxe
typedef T1 iterator;
Poznámky
Typ popisuje objekt nezadaného typu T1
, který může sloužit jako vstupní iterátor pro řízenou sekvenci.
Příklad
// 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
Typ klíče slovníku.
Syntaxe
typedef Key key_type;
Poznámky
Typ je synonymem parametru Key
šablony , ve specializaci pro IDictionary
nebo IDictionary<Value>
; jinak není definován.
Příklad
// 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
Typ hodnoty slovníku.
Syntaxe
typedef Value mapped_type;
Poznámky
Typ je synonymem parametru Value
šablony , ve specializaci pro IDictionary
nebo IDictionary<Value>
; jinak není definován.
Příklad
// 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=
Nahradí uložený popisovač seznamu BCL.
Syntaxe
collection_adapter<Coll>% operator=(collection_adapter<Coll>% right);
Parametry
right
Adaptér pro kopírování.
Poznámky
Operátor člena zkopíruje right
objekt a pak vrátí *this
. Slouží k nahrazení uloženého úchytu seznamu BCL kopií uloženého úchytu seznamu BCL v right
souboru .
Příklad
// 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
Typ odkazu na prvek
Syntaxe
typedef value_type% reference;
Poznámky
Typ popisuje odkaz na prvek.
Příklad
// 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
Spočítá počet prvků.
Syntaxe
size_type size();
Poznámky
Členová funkce vrátí délku řízené sekvence. Není definován v specializaci pro IEnumerable
nebo IEnumerable<Value>
.
Příklad
// 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
Typ vzdálenosti se znaménkem mezi dvěma prvky
Syntaxe
typedef int size_type;
Poznámky
Typ popisuje nezáporný počet prvků.
Příklad
// 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
Zamění obsah dvou kontejnerů.
Syntaxe
void swap(collection_adapter<Coll>% right);
Parametry
right
Kontejner pro prohození obsahu.
Poznámky
Členová funkce prohodí uložené úchyty seznamu BCL mezi *this
a right
.
Příklad
// 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
Typ prvku
Syntaxe
typedef Value value_type;
Poznámky
Typ je synonymem parametru Value
šablony , pokud je k dispozici ve specializaci; jinak se jedná o synonymum pro System::Object^
.
Příklad
// 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
Vytvořte pár iterátoru.
Syntaxe
template<typename Iter>
range_adapter<Iter> make_collection(Iter first, Iter last);
Parametry
Iter
Typ zabalených iterátorů.
first
První iterátor, který se má zabalit.
last
Druhý iterátor, který se má zabalit.
Poznámky
Šablona funkce vrátí gcnew range_adapter<Iter>(first, last)
. Slouží k vytvoření objektu range_adapter<Iter>
z dvojice iterátorů.
Příklad
// 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)
Třída šablony, která zabalí dvojici iterátorů, které se používají k implementaci několika rozhraní BCL (Base Class Library). Pomocí range_adapter můžete manipulovat s rozsahem STL/CLR, jako by se jednalo o kolekci BCL.
Syntaxe
template<typename Iter>
ref class range_adapter
: public
System::Collections::IEnumerable,
System::Collections::ICollection,
System::Collections::Generic::IEnumerable<Value>,
System::Collections::Generic::ICollection<Value>
{ ..... };
Parametry
Iter
Typ přidružený ke zabaleným iterátorům.
Členové
Členová funkce | Popis |
---|---|
range_adapter::range_adapter |
Vytvoří objekt adaptéru. |
Operátor | Popis |
---|---|
range_adapter::operator= |
Nahradí uložený pár iterátoru. |
Rozhraní
Rozhraní | Popis |
---|---|
IEnumerable | Iteruje prvky v kolekci. |
ICollection | Udržuje skupinu prvků. |
IEnumerable<T> | Iteruje prostřednictvím typed prvků v kolekci. |
ICollection<T> | Udržuje skupinu typových prvků. |
Poznámky
Range_adapter ukládá dvojici iterátorů, které zase odděluje posloupnost prvků. Objekt implementuje čtyři rozhraní BCL, která umožňují iterovat prvky v pořadí. Tuto třídu šablony použijete k manipulaci s rozsahy STL/CLR podobně jako kontejnery BCL.
range_adapter::operator=
Nahradí uložený pár iterátoru.
Syntaxe
range_adapter<Iter>% operator=(range_adapter<Iter>% right);
Parametry
right
Adaptér pro kopírování.
Poznámky
Operátor člena zkopíruje right
objekt a pak vrátí *this
. Slouží k nahrazení uložené dvojice iterátoru kopií uložené dvojice iterátoru v right
souboru .
Příklad
// 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
Vytvoří objekt adaptéru.
Syntaxe
range_adapter();
range_adapter(range_adapter<Iter>% right);
range_adapter(range_adapter<Iter>^ right);
range_adapter(Iter first, Iter last);
Parametry
first
První iterátor, který se má zabalit.
last
Druhý iterátor, který se má zabalit.
right
Objekt, který chcete kopírovat.
Poznámky
Konstruktor:
range_adapter();
inicializuje uloženou dvojici iterátoru s výchozími vytvořenými iterátory.
Konstruktor:
range_adapter(range_adapter<Iter>% right);
inicializuje uloženou dvojici iterátoru zkopírováním dvojice uložené v right
.
Konstruktor:
range_adapter(range_adapter<Iter>^ right);
inicializuje uloženou dvojici iterátoru zkopírováním dvojice uložené v *right
.
Konstruktor:
range_adapter(Iter^ first, last);
inicializuje uložený iterátor pár s first
a last
.
Příklad
// 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