07. STL. Forward list

STL. Forward list По сути forward list реализует односвязные списки, позволяя быстро добавлять и удалять элементы без копирования всего массива данных. Реализация односвязного списка была добавлена несколько позже в STL. Для работы необходимо подключить библиотеку #include <forward_list> forward list входит в пространство имен std, поэтому или пишем std:: или используем пространство имен using namespace std; […]

C++. Цикл for each. Range-based циклы.

Цикл for each. Range-based циклы. Циклы, основанные на диапазонах. Цикл предназначен для контейнеров и итерирования по элементам контейнера и перебирать коллекцию элементов. В районе 11 стандарта С++ приняли новый вид цикла foreach, до этого IDE создали свои варианты цикла. foreach (var, container) //QtCreator { } for each (var in container) //Microsoft Visual Studio { } […]

06. STL. LIST

STL. LIST По сути list реализует двусвязные списки, позволяя быстро добавлять и удалять элементы без копирования всего массива данных. Для работы необходимо подключить библиотеку #include <list> List входит в пространство имен std, поэтому или пишем std:: или используем пространство имен using namespace std; У итератора листа нет возможности произвольного доступа, нужно идти по каждому элементу. […]

04. STL. Vector

STL. Vector Класс вектор представляет собой динамический массив, для которого реализованы все основные операции, в том числе выделение и удаление памяти. Работать с ним можно как будто мы сами создали массив в динамической памяти, и описали все операции с ним (добавление/удаление элементов, расширение массива, получение данных из массива и тд.) Для работы с вектором необходимо […]

C++. Ключевое слово auto

Ключевое слово auto Ключевое слово auto позволяет не указывать тип данных при его создании, этот тип подставится компилятором на основе ПРИСВОЕНИЯ ДАННЫХ при создании. Например: auto a=10; на этапе компиляции коммпилятор заменит auto a на int a т.е. int a=10; Для простых типов данных такая замена бессмысленна, но для итераторов это м.б. удобно. Ранее мы […]

03. STL. Итераторы

STL. Итераторы В языке C++ обычно нет необходимости реализовывать классы для работы с массивами, списками и тд., то есть классы для хранения данных (их называют контейнеры). Они уже давно созданы и оптимизированы, программисту достаточно ими пользоваться, что существенно сокращает время на разработку. Свои реализации нужны для каких-либо специфических задач. Набор объектов таких классов-контейнеров называют коллекцией. […]

02. Очереди, дек, Deque

Очереди, дек, Deque Очереди Иногда возникает необходимость последовательно обработать какие-то объемы данных, для этого их помещают в очередь. Что это такое? По сути это двусвязный список, где в конец мы добавляем новые элементы, из начала берем данные на обработку, а действия в середине списка запрещены. Т.е. можем «положить в конец», можем «взять из начала». В […]

01. Бинарные деревья

Бинарные деревья Бинарные деревья в чем-то похожи на бинарный поиск в отсортированном массиве, только применяется на этапе создания этой структуры данных. По сути это «двунаправленные списки, адаптированные для алгоритма бинарного поиска». Ключевым для классического бинарного дерева является наличие уникальных идентификаторов/индексов/хеш сумм и тд. Которые можно сравнивать, за счет этого можно двигаться по дереву. Прародитель (Data1) […]

00. Односвязный и двусвязный список. Динамические структуры

Односвязный и двусвязный список. Динамические структуры Односвязный список: Про односвязные списки очень хорошо рассказано в видеоуроке https://www.youtube.com/watch?v=C9FK1pHLnhI&list=PLQOaTSbfxUtAIipl4136nwb4ISyFk8oI4 При работе с динамической памятью и массивами одними из самых затратных операций являются расширение массива или удаление элемента (т.к. приходится выделять новую область памяти и копировать данные). Для упрощения работы придуманы односвязные списки, по сути классы, которые хранят […]