Здравствуйте, ребята, надеюсь, ваша жизнь программиста идет хорошо. Теперь это важный блог для каждого конкурентоспособного программиста, который хочет получить предложение от компании своей мечты, такой как google или Microsoft. Я знаю, что те, кто программирует на C++, знают о важности STL, поскольку она играет важную роль. важную роль в получении работы в компаниях нашей мечты.
В этом блоге я расскажу вам все о STL с нуля, чтобы начать свое соревновательное программирование и стать в нем мастером.
Давайте начнем
Рекомендации по тому, что мы сегодня обсуждаем
1. Что такое STL?
2. Типы STL
3. Массивы
4. Итераторы
Что такое СТЛ?
STL — это предопределенные шаблоны или структуры данных в C++, которые можно использовать непосредственно в коде для повышения читабельности кода. Поскольку он играет огромную роль в соревновательном программировании для применения всех структур данных непосредственно в код всякий раз, когда это необходимо. Теперь мы немного обсудим типы STL, а затем сразу перейдем к наиболее распространенным STL, которые будут использоваться в соревновательном программировании.
Типы STL
Существует 4 типа STL.
- Последовательные контейнеры
- Адаптеры контейнеров
- Ассоциативные контейнеры
- Неупорядоченные ассоциативные контейнеры
Сейчас я кратко расскажу вам, что представляют собой эти контейнеры, а затем мы перейдем к основной теме — как использовать эти контейнеры в соревновательном программировании.
1. Последовательные контейнеры
Контейнеры, которые последовательно хранят данные в контейнере, например массив, вектор, удаление из очереди, список и т. д.
2. Адаптеры контейнеров
Адаптеры контейнеров — это те контейнеры, которые не только эффективно хранят данные, но и накладывают на них некоторые ограничения в процессе хранения и извлечения элементов. Пример:- стек, очередь и приоритет_очереди. Мы подробно расскажем обо всем и обо всем в следующих блогах.
3. Ассоциативные контейнеры
Ассоциативные контейнеры хранят только отсортированные данные в своих контейнерах, поскольку в этих контейнерах данные можно искать гораздо быстрее и эффективнее, чтобы предоставить вам подходящий результат, который вы хотите.
Пример: набор, мультимножество, карта и мультикарта.
4. Неупорядоченные ассоциативные контейнеры
Как следует из названия, контейнер без порядка означает, что элементы могут храниться в случайном порядке и не следовать строгому порядку хранения элементов. Поскольку элементы хранятся с помощью хэширования поиск может быть выполнен в O(1) временной сложности в лучшем случае или O(n) временной сложности в худшем случае.
Пример:- unordered_set, unordered_map, unordered_multiset, unordered_multimap.
Поскольку я дал краткое описание типов контейнеров, теперь мы начнем с основной темы — как использовать эти контейнеры.
3. Массивы
что такое массивы??
Массивы – это наборы элементов с похожими типами данных, которые хранятся в непрерывной области памяти.
Теперь обычное объявление массива, как мы все знаем,
datatype arr[size]; // for example int arr[30];
Это объявление зарезервирует 30 слотов памяти, каждый из которых составляет 4 байта, поскольку целое число занимает 4 байта каждый в памяти для хранения значений в памяти. Память выделяется только во время объявления, поскольку это статическое объявление.
Теперь перейдем к Array STL, который также объявлен подобным образом и также является статическим объявлением, поскольку размер фиксирован.
Синтаксис массива STL
array<datatype , size> variable_name; // for example Array<int , 30> arr;
- Если мы изначально не вставим в него значения, то оно будет содержать в себе мусорное значение.
- Если мы объявим array‹int, 30›arr глобально, то все значения будут автоматически инициализированы 0.
Операция Выполнить в массиве STL
- arr.fill(элемент)
Эта операция выполняется для заполнения всего массива заданным элементом, который передается в него в качестве параметра функции при локальном объявлении массива, иначе он будет принимать в нем мусорные значения.
- arr.at(индексная позиция)
Он дает значение, указанное в данной позиции индекса.
- arr.front()
Он дает значение, которое находится на первой позиции в массиве.
- arr.back()
Он дает значение, которое находится на последней позиции в массиве.
- arr.size()
Он дает количество элементов, которые вставлены в массив в данный момент.
Это все о массивах. Теперь следующая тема — итераторы, самая важная тема для соревновательного программирования.
4. Итераторы
Что такое итераторы?
Итераторы похожи на указатели, которые указывают на элемент, хранящийся в памяти. Мы можем обращаться к итераторам точно так же, как к указателям. Большинство контейнеров STL имеют функциональные возможности использования итераторов.
Есть 4 итератора, которые мы будем использовать в соревновательном программировании:
- начать()
- конец()
- rbegin()
- разорвать()
начать()
Этот итератор укажет на первый элемент в требуемом контейнере STL.
конец()
Этот итератор укажет на элемент, который находится рядом с последним элементом в контейнере. т. е. этот итератор будет указывать на пустое/мусорное значение в контейнере STL.
Это даст результат в виде значения мусора, которого нет в массиве, равном 32.
Теперь, чтобы получить доступ к последнему элементу массива, который в данном примере равен 100, просто вычтите 1 из итератора.
rbegin()
Этот итератор означает обратное начало, которое указывает на последний элемент, хранящийся в контейнере. При этом мы не будем вычитать 1 из arr.rbegin(), чтобы получить последний элемент.
разорвать ()
Этот итератор означает обратный конец, и его функциональность полностью обратна описанному выше конечному итератору. Он указывает на элемент, который находится чуть ниже первого элемента. Пример: если первый элемент с индексом 0 всегда присутствует, то этот итератор будет указывать на индекс -1 означает, что мусор/пустое значение в контейнере. Теперь, чтобы получить доступ к первому элементу в итераторе, мы должны добавить 1 в arr.rend(), чтобы получить доступ к первому элементу в контейнере.
Итератор reverse_end (rend()) работает неправильно?
Здесь он переходит к произвольному значению, которое находится рядом с первым элементом, поэтому мы должны выполнить -1, чтобы получить первый элемент в контейнере.
Почему так происходит я расскажу в следующей части своего блога
Теперь это все для Части 1. В следующей части мы обсудим векторы, которые представляют собой динамический массив, удаление из очереди и список. Так что следите за обновлениями, чтобы узнать больше.
СЛЕДУЙТЕ ЗА МНОЙ, ЧТОБЫ ПОДПИСАТЬСЯ ОБРАТНО.
Если вы хотите узнать больше о возможностях кода VS, загляните в этот блог.
До встречи в моем следующем блоге, а пока продолжайте учиться и расти.