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 При работе с динамической памятью и массивами одними из самых затратных операций являются расширение массива или удаление элемента (т.к. приходится выделять новую область памяти и копировать данные). Для упрощения работы придуманы односвязные списки, по сути классы, которые хранят […]