<cliext/adapter>
(STL/CLR)
Заголовок <cliext/adapter>
STL/CLR указывает два шаблона классов (collection_adapter
и range_adapter
) и шаблон make_collection
функции.
Синтаксис
#include <cliext/adapter>
Требования
Заголовок:<cliext/adapter>
Пространство имен: cliext
Объявления
Класс | Description |
---|---|
collection_adapter |
Упаковывает коллекцию библиотеки базовых классов (BCL) в виде диапазона. |
range_adapter |
Упаковывает диапазон как коллекцию BCL. |
Function | Description |
---|---|
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
Тип упаковаемой коллекции.
Специализации
платформы | Description |
---|---|
IEnumerable |
Последовательности с помощью элементов. |
ICollection |
Поддерживает группу элементов. |
IList |
Поддерживает упорядоченную группу элементов. |
IDictionary |
Сохраняйте набор пар {key, value}. |
IEnumerable<Value> |
Последовательности через типизированные элементы. |
ICollection<Value> |
Поддерживает группу типизированных элементов. |
IList<Value> |
Поддерживает упорядоченную группу типизированных элементов. |
IDictionary<Value> |
Поддерживает набор пар типа {key, value}. |
Участники
Определение типа | Description |
---|---|
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 |
Тип элемента. |
Функция-член | Description |
---|---|
collection_adapter::base |
Задает интерфейс BCL в оболочке. |
collection_adapter::begin |
Задает начало управляемой последовательности. |
collection_adapter::collection_adapter |
Создает объект адаптера. |
collection_adapter::end |
Задает конец управляемой последовательности. |
collection_adapter::size |
Подсчитывает количество элементов. |
collection_adapter::swap |
Меняет местами содержимое двух контейнеров. |
Operator | Description |
---|---|
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
или IDictionary<Value>
в противном случае он не определен.
Пример
// 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
или IDictionary<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 копией хранимого дескриптора BCL в right
.
Пример
// 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
Тип расстояния со знаком между двумя элементами.
Синтаксис
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
Контейнер для обмена содержимым.
Замечания
Функция-член переключает сохраненные маркеры 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
Второй итератор для упаковки.
Замечания
Шаблон функции возвращается 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
Тип, связанный с упакованными итераторами.
Участники
Функция-член | Description |
---|---|
range_adapter::range_adapter |
Создает объект адаптера. |
Operator | Description |
---|---|
range_adapter::operator= |
Заменяет сохраненную пару итератора. |
Интерфейсы
Интерфейс | Description |
---|---|
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