С++ Оценка времени выполнения кода
Оценка времени выполнения кода Весьма полезно иметь возможность оценить время выполнения какого-то фрагмента кода или потока чтобы выполнить оптимизацию. Для этого необходима библиотека #include «chrono» или #include «thread», которая уже включает библиотеку chrono. Суть измерения – запоминаем «системное» время в начале кода и по его окончанию и высчитываем разницу. За работу со временем отвечает библиотека […]
C/C++ Директива typedef
Директива typedef Директива typedef является по своей сути дефайном/макроопределением, но для типов данных. Вспомним, что такое обычный дефайн #define –это директива препроцессора, заменяющая простые переменные/фрагменты кода. typedef по сути аналогичен define (и в ряде случаев может быть заменен), но он позволяет создать «новую» переменную и впоследствии пользоваться этим названием. Рассмотрим на примере: typedef const int* […]
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. Из […]
08. STL. Операторы сравнения
STL. Операторы сравнения Контейнеры из STL можно сравнивать между собой, но только в случае если элементы, из которых состоит контейнер имеют перегруженные операторы сравнения (>, >=, <, <=, ==, != ). Например можно сравнивать 2 вектора, в этом случае будет сравнение ПО ВСЕМ элементам ВНУТРИ вектора попарно. Например: bool result = (Vector1>Vector2); Если все элемент […]