PIP 5.5.3
Platform-Independent Primitives
Файлы | Классы
Containers

Различные классы контейнеров Подробнее...

Файлы

файл  picontainers.h
 Базовые макросы для контейнеров
 
файл  pideque.h
 Объявление PIDeque.
 
файл  pimap.h
 Объявление PIMap.
 
файл  pipair.h
 Объявление PIPair.
 
файл  piqueue.h
 Объявление PIQueue.
 
файл  pistack.h
 Объявление PIStack.
 
файл  pivector.h
 Объявление PIVector.
 

Классы

class  PIDeque< T >
 Последовательный двухсторонний контейнер с линейной памятью - динамический массив любого типа. Подробнее...
 
class  PIMap< Key, T >
 Словарь. Подробнее...
 
class  PIMapIteratorConst< Key, T >
 Итератор Java стиля для PIMap. Подробнее...
 
class  PIMapIteratorConstReverse< Key, T >
 Итератор Java стиля для PIMap в обратном порядке. Подробнее...
 
class  PIMapIterator< Key, T >
 Итератор Java стиля для PIMap. Подробнее...
 
class  PIMapIteratorReverse< Key, T >
 Итератор Java стиля для PIMap в обратном порядке. Подробнее...
 
class  PIPair< Type0, Type1 >
 Класс, который позволяет хранить два разнородных объекта как единое целое. Подробнее...
 
class  PIQueue< T >
 Класс контейнера наследованый от PIDeque с функциональностью очереди. Подробнее...
 
class  PIStack< T >
 Класс контейнера наследованый от PIVector с функциональностью стека. Подробнее...
 
class  PIVector< T >
 Последовательный контейнер с линейной памятью - динамический массив любого типа. Подробнее...
 

Подробное описание

Различные классы контейнеров

Сборка с использованием CMake

find_package(PIP REQUIRED)
target_link_libraries([target] PIP)

Состав

Класс Описание
PIVector Линейный массив, быстрое добавление в конец
PIDeque Линейный массив, быстрое добавление вначало и конец
PIMap Массив ключ/значение, словарь
PISet Множество
PIStack Стек
PIQueue Очередь
PIPair Пара
PIVector2D Линейный двумерный прямоугольный массив

Итераторы в стиле STL

Они совместимы с базовыми алгоритмами Qt и STL и оптимизированы по скорости.

Для каждого контейнерного класса есть два типа итераторов в стиле STL: один из них предоставляет доступ только для чтения, а другой - доступ для чтения-записи. Итераторы только для чтения должны использоваться везде, где это только возможно, так как они быстрее, чем итераторы для чтения-записи. Итератор только для чтения - const_iterator. Итератор для чтения-записи - iterator.

API итераторов в стиле STL сделан по образцу указателей в массиве. Например, оператор ++ перемещает итератор к следующему элементу, а оператор * возвращает элемент, на который позиционирован итератор. Тип iterator - это как typedef для T *, а тип const_iterator - как typedef для const T *. Итераторы в стиле STL указывают непосредственно на элемент. Функция контейнера begin() возвращает итератор, указывающий на первый элемент контейнера. Функция контейнера end() возвращает итератор, указывающий на воображаемый элемент, находящийся в позиции, следующей за последним элементом контейнера. end() обозначает несуществующую позицию; он никогда не должен разыменовываться. Обычно, он используется, как условие выхода из цикла.

Например:

for (PIVector<int>::const_iterator i = v.begin(); i != v.end(); ++i) piCout << *i;
std::for_each(v.begin(), v.end(), [](int n){std::cout << n << ' ';});
Последовательный контейнер с линейной памятью - динамический массив любого типа.
Definition: pivector.h:118
iterator begin()
Итератор на первый элемент.
Definition: pivector.h:553
#define piCout
Макрос для условного (piDebug) вывода в PICout(StdOut)
Definition: picout.h:35

Если список пуст, то begin() равен end(), поэтому цикл никогда не выполнится.

итераторы

В следующей таблице подводится итог API итераторов в стиле STL:

Выражение Поведение
*i Возвращает текущий элемент
++i Перемещает итератор к следующему элементу
i += n Перемещает итератор вперед на n элементов
--i Перемещает итератор на один элемент назад
i -= n Перемещает итератор назад на n элементов
i - j Возвращает количество элементов, находящихся между итераторами i и j

Оба оператора ++ и -- могут использоваться и как префиксные (++i, --i) и как постфиксные (i++, i--) операторы. Префиксная версия изменяет итератор, и возвращает ссылку на измененный итератор; постфиксная версия, берет копию итератора перед его изменением, и возвращает эту копию. В выражениях, в которых возвращаемое значение игнорируется, мы рекомендуем использовать префиксную версию (++i, --i), так как она несколько быстрее.

Для неконстантных итераторов, возвращаемое значение унарного оператора * может быть использовано с левой стороны от оператора присваивания.

Авторы

Иван Пелипенко peri4.nosp@m.ko@y.nosp@m.andex.nosp@m..ru; Андрей Бычков work..nosp@m.a.b@.nosp@m.yande.nosp@m.x.ru;