<cliext/adapter>
(STL/CLR)
L'intestazione <cliext/adapter>
STL/CLR specifica due modelli di classe (collection_adapter
e range_adapter
) e il modello di make_collection
funzione .
Sintassi
#include <cliext/adapter>
Requisiti
Intestazione:<cliext/adapter>
Spazio dei nomi: cliext
Dichiarazioni
Classe | Descrizione |
---|---|
collection_adapter |
Esegue il wrapping dell'insieme BCL (Base Class Library) come intervallo. |
range_adapter |
Esegue il wrapping dell'intervallo come raccolta BCL. |
Funzione | Descrizione |
---|---|
make_collection |
Crea un adattatore di intervallo usando una coppia di iteratori. |
Membri
collection_adapter
Esegue il wrapping di una raccolta .NET da usare come contenitore STL/CLR. È collection_adapter
una classe modello che descrive un semplice oggetto contenitore STL/CLR. Esegue il wrapping di un'interfaccia BCL (Base Class Library) e restituisce una coppia di iteratori usata per modificare la sequenza controllata.
Sintassi
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>>;
Parametri
Coll
Tipo dell'insieme di cui è stato eseguito il wrapping.
Specializzazioni
Specializzazione | Descrizione |
---|---|
IEnumerable |
Sequenze tramite elementi. |
ICollection |
Gestisce un gruppo di elementi. |
IList |
Gestisce un gruppo ordinato di elementi. |
IDictionary |
Mantenere un set di coppie {key, value}. |
IEnumerable<Value> |
Sequenze tramite elementi tipizzato. |
ICollection<Value> |
Gestisce un gruppo di elementi tipizzato. |
IList<Value> |
Gestisce un gruppo ordinato di elementi tipizzato. |
IDictionary<Value> |
Gestisce un set di coppie {key, value} tipate. |
Membri
Definizione dei tipi | Descrizione |
---|---|
collection_adapter::difference_type |
Tipo di una distanza Signed tra due elementi. |
collection_adapter::iterator |
Tipo di un iteratore per la sequenza controllata. |
collection_adapter::key_type |
Tipo di chiave del dizionario. |
collection_adapter::mapped_type |
Tipo di un valore del dizionario. |
collection_adapter::reference |
Tipo di un riferimento a un elemento. |
collection_adapter::size_type |
Tipo di una distanza Signed tra due elementi. |
collection_adapter::value_type |
Tipo di un elemento. |
Funzione membro | Descrizione |
---|---|
collection_adapter::base |
Definisce l'interfaccia BCL di cui è stato eseguito il wrapping. |
collection_adapter::begin |
Indica l'inizio della sequenza controllata. |
collection_adapter::collection_adapter |
Costruisce un oggetto adapter. |
collection_adapter::end |
Designa la fine della sequenza controllata. |
collection_adapter::size |
Conta il numero di elementi. |
collection_adapter::swap |
Scambia il contenuto di due contenitori. |
Operatore | Descrizione |
---|---|
collection_adapter::operator= |
Sostituisce l'handle BCL archiviato. |
Osservazioni:
Questa classe modello viene usata per modificare un contenitore BCL come contenitore STL/CLR. Archivia collection_adapter
un handle a un'interfaccia BCL, che a sua volta controlla una sequenza di elementi. Un collection_adapter
oggetto X
restituisce una coppia di iteratori X.begin()
di input e X.end()
che si usa per visitare gli elementi, in ordine. Alcune specializzazioni consentono anche di scrivere X.size()
per determinare la lunghezza della sequenza controllata.
collection_adapter::base
Definisce l'interfaccia BCL di cui è stato eseguito il wrapping.
Sintassi
Coll^ base();
Osservazioni:
La funzione membro restituisce l'handle di interfaccia BCL archiviato.
Esempio
// 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
Indica l'inizio della sequenza controllata.
Sintassi
iterator begin();
Osservazioni:
La funzione membro restituisce un iteratore di input che definisce il primo elemento della sequenza controllata o appena oltre la fine di una sequenza vuota.
Esempio
// 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
Costruisce un oggetto adapter.
Sintassi
collection_adapter();
collection_adapter(collection_adapter<Coll>% right);
collection_adapter(collection_adapter<Coll>^ right);
collection_adapter(Coll^ collection);
Parametri
collection
Handle BCL da eseguire per il wrapping.
right
Oggetto da copiare.
Osservazioni:
Costruttore:
collection_adapter();
inizializza l'handle archiviato con nullptr
.
Costruttore:
collection_adapter(collection_adapter<Coll>% right);
inizializza l'handle archiviato con right.base()
.
Costruttore:
collection_adapter(collection_adapter<Coll>^ right);
inizializza l'handle archiviato con right->base()
.
Costruttore:
collection_adapter(Coll^ collection);
inizializza l'handle archiviato con collection
.
Esempio
// 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
Tipi di distanza con segno tra due elementi.
Sintassi
typedef int difference_type;
Osservazioni:
Il tipo descrive un conteggio degli elementi con segno.
Esempio
// 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
Designa la fine della sequenza controllata.
Sintassi
iterator end();
Osservazioni:
La funzione membro restituisce un iteratore di input che punta appena oltre la fine della sequenza controllata.
Esempio
// 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
Tipo di un iteratore per la sequenza controllata.
Sintassi
typedef T1 iterator;
Osservazioni:
Il tipo descrive un oggetto di tipo T1
non specificato che può fungere da iteratore di input per la sequenza controllata.
Esempio
// 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
Tipo di chiave del dizionario.
Sintassi
typedef Key key_type;
Osservazioni:
Il tipo è un sinonimo del parametro Key
di modello , in una specializzazione per IDictionary
o IDictionary<Value>
; in caso contrario, non è definito.
Esempio
// 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
Tipo di un valore del dizionario.
Sintassi
typedef Value mapped_type;
Osservazioni:
Il tipo è un sinonimo del parametro Value
di modello , in una specializzazione per IDictionary
o IDictionary<Value>
; in caso contrario, non è definito.
Esempio
// 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=
Sostituisce l'handle BCL archiviato.
Sintassi
collection_adapter<Coll>% operator=(collection_adapter<Coll>% right);
Parametri
right
Adapter da copiare.
Osservazioni:
L'operatore membro copia right
nell'oggetto , quindi restituisce *this
. Viene usato per sostituire l'handle BCL archiviato con una copia dell'handle BCL archiviato in right
.
Esempio
// 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
Tipo di un riferimento a un elemento.
Sintassi
typedef value_type% reference;
Osservazioni:
Il tipo descrive un riferimento a un elemento.
Esempio
// 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
Conta il numero di elementi.
Sintassi
size_type size();
Osservazioni:
La funzione membro restituisce la lunghezza della sequenza controllata. Non è definito in una specializzazione per IEnumerable
o IEnumerable<Value>
.
Esempio
// 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
Tipo di una distanza Signed tra due elementi.
Sintassi
typedef int size_type;
Osservazioni:
Il tipo descrive un numero di elementi non negativi.
Esempio
// 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
Scambia il contenuto di due contenitori.
Sintassi
void swap(collection_adapter<Coll>% right);
Parametri
right
Contenitore con cui scambiare il contenuto.
Osservazioni:
La funzione membro scambia gli handle BCL archiviati tra *this
e right
.
Esempio
// 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
Tipo di un elemento.
Sintassi
typedef Value value_type;
Osservazioni:
Il tipo è un sinonimo del parametro Value
di modello , se presente nella specializzazione; in caso contrario, è un sinonimo di System::Object^
.
Esempio
// 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)
Creare un oggetto range_adapter
da una coppia di iteratori.
Sintassi
template<typename Iter>
range_adapter<Iter> make_collection(Iter first, Iter last);
Parametri
Iter
Tipo degli iteratori di cui è stato eseguito il wrapping.
first
Primo iteratore a capo.
last
Secondo iteratore di cui eseguire il wrapping.
Osservazioni:
Il modello di funzione restituisce gcnew range_adapter<Iter>(first, last)
. Viene usato per costruire un range_adapter<Iter>
oggetto da una coppia di iteratori.
Esempio
// 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)
Classe modello che esegue il wrapping di una coppia di iteratori usati per implementare diverse interfacce BCL (Base Class Library). Usare il range_adapter per modificare un intervallo STL/CLR come se fosse una raccolta BCL.
Sintassi
template<typename Iter>
ref class range_adapter
: public
System::Collections::IEnumerable,
System::Collections::ICollection,
System::Collections::Generic::IEnumerable<Value>,
System::Collections::Generic::ICollection<Value>
{ ..... };
Parametri
Iter
Tipo associato agli iteratori di cui è stato eseguito il wrapping.
Membri
Funzione membro | Descrizione |
---|---|
range_adapter::range_adapter |
Costruisce un oggetto adapter. |
Operatore | Descrizione |
---|---|
range_adapter::operator= |
Sostituisce la coppia iteratore archiviata. |
Interfacce
Interfaccia | Descrizione |
---|---|
IEnumerable | Scorre gli elementi nella raccolta. |
ICollection | Gestisce un gruppo di elementi. |
IEnumerable<T> | Scorre gli elementi tipizzato nella raccolta. |
ICollection<T> | Gestisce un gruppo di elementi tipizzato. |
Osservazioni:
Il range_adapter archivia una coppia di iteratori, che a sua volta delimitano una sequenza di elementi. L'oggetto implementa quattro interfacce BCL che consentono di scorrere gli elementi in ordine. Questa classe modello viene usata per modificare gli intervalli STL/CLR in modo analogo ai contenitori BCL.
range_adapter::operator=
Sostituisce la coppia iteratore archiviata.
Sintassi
range_adapter<Iter>% operator=(range_adapter<Iter>% right);
Parametri
right
Adapter da copiare.
Osservazioni:
L'operatore membro copia right
nell'oggetto , quindi restituisce *this
. Viene usato per sostituire la coppia iteratore archiviata con una copia della coppia iteratore archiviata in right
.
Esempio
// 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
Costruisce un oggetto adapter.
Sintassi
range_adapter();
range_adapter(range_adapter<Iter>% right);
range_adapter(range_adapter<Iter>^ right);
range_adapter(Iter first, Iter last);
Parametri
first
Primo iteratore a capo.
last
Secondo iteratore di cui eseguire il wrapping.
right
Oggetto da copiare.
Osservazioni:
Costruttore:
range_adapter();
inizializza la coppia di iteratori archiviati con iteratori costruiti predefiniti.
Costruttore:
range_adapter(range_adapter<Iter>% right);
inizializza la coppia iteratore archiviata copiando la coppia archiviata in right
.
Costruttore:
range_adapter(range_adapter<Iter>^ right);
inizializza la coppia iteratore archiviata copiando la coppia archiviata in *right
.
Costruttore:
range_adapter(Iter^ first, last);
inizializza la coppia di iteratori archiviati con first
e last
.
Esempio
// 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