25.1 C++ Функторы

Функторы В языке C++ Имеется возможность создания функторов – классов которые ведут себя как функции, но при этом имеют инкапсулированные данные Для этой цели производится перегрузка оператора (). class MyFunctor { public: void operator()(int a) // или void operator()() { cout<<«Code «<<cnt<<» a=»<<a<<endl; ++cnt; } private: int cnt=0; }; int main() { MyFunctor myF; myF(10); […]

C/C++ Директива typedef

Директива typedef Директива typedef является по своей сути дефайном/макроопределением, но для типов данных. Вспомним, что такое обычный дефайн #define –это директива препроцессора, заменяющая простые переменные/фрагменты кода. typedef по сути аналогичен define (и в ряде случаев может быть заменен), но он позволяет создать «новую» переменную и впоследствии пользоваться этим названием. Рассмотрим на примере: typedef const int* […]

C/C++ Многофайловые проекты

Многофайловые проекты Рано или поздно, но проект разрастается и становится трудночитабельным, а также труднопереносимым в другие проекты, для упрощения работы используется разбиение «мега проекта» на несколько мелких, функционально законченных проектов. Принцип в языках C/C++ примерно одинаков: создаются отдельные файлы с расширением .c/cpp для кода и файл заголовка .h для реализации. Примечание 1: желательно все файлы […]

15. STL. Queue / priority queue. Адаптеры контейнеров.

STL. Queue / priority queue. Адаптеры контейнеров. Также как и stack очереди являются адаптерами для контейнеров, т.е. они изменяют обращение к памяти у контейнеров и некоторое использование методов, но сами по себе контейнерами не являются. Очереди реализуют описанный ранее принцип: Простая очередь queue – первый вошел/первый вышел, она может работать с контейнерами list и deque, […]

14. STL. Stack. Адаптеры контейнеров.

STL. Stack. Адаптеры контейнеров. Stack не является самостоятельным контейнером, он лишь может модифицировать ПРАВИЛА обращения к памяти для других контейнеров: Как известно стек – структура памяти, при которой новые элементы могут добавляться лишь в конце имеющихся данных. А например в списки мы можем добавлять данные и в начало и в середину и в конец. НО […]

12. STL. Unordered_map / unordered_set

STL. Unordered_map / unordered_set В ряде случаев становится удобным использовать ХЕШ-таблицу как ключ для поиска значений, в этом случае используются unordered_map/ unordered_set из библиотек #include <unordered_map>#include <unordered_set> Стандартная библиотека может посчитать хеш-суммы для стандартных типов данных, для пользовательских типов данных (классов) можно написать свою функцию подсчета хеш-сумм и передать ее в шаблон unordered_map/ unordered_set. Одним […]

13. STL. Специализированные контейнеры

STL. Специализированные контейнеры В языке C++ и библиотеке STL есть  некоторые специализированные контейнеры, которые подходят для довольно узких задач, часть из них мы уже использовали, часть необходимо описать отдельно: Для работы контейнеров как правило требуется использование пространства имен std using namespace std; Контейнер array: Array реализует массив на стеке (статический массив). По сути реализует массив […]

11. STL. MAP/MULTIMAP Ассоциативные контейнеры

STL. MAP/MULTIMAP Ассоциативные контейнеры MAP реализует алгоритмы бинарного дерева, но работает с парами значений (ключ + доп. значение). Для работы с map/multimap необходимо подключить библиотеку #include <map> Map входит в пространство имен std, поэтому или пишем std:: или используем пространство имен using namespace std; Главным отличием map от set является возможность работы с парами значений, […]

10. STL. SET/MULTISET Ассоциативные контейнеры

STL. SET/MULTISET Ассоциативные контейнеры SET реализует алгоритмы бинарного дерева. Для работы необходимо подключить библиотеку #include <set> Set входит в пространство имен std, поэтому или пишем std:: или используем пространство имен using namespace std; При добавлении элемента в контейнер set происходит его «сортировка» согласно алгоритму бинарного дерева, а дублирующиеся элементы уничтожаются, также из-за самой особенности бинарного […]

09. STL. Deque

STL. Deque Deque реализует двунаправленную очередь. Для работы необходимо подключить библиотеку #include <deque> Deque входит в пространство имен std, поэтому или пишем std:: или используем пространство имен using namespace std; deque<int> myDEQ={1,2,3,4}; Как говорилось ранее, deque это гибрид двусвязного списка и динамического массива, по сути это list, где каждый узел представляет собой небольшой vector. Из […]