Здравствуйте, ребята, надеюсь, ваша жизнь программиста идет хорошо. Теперь это важный блог для каждого конкурентоспособного программиста, который хочет получить предложение от компании своей мечты, такой как google или Microsoft. Я знаю, что те, кто программирует на C++, знают о важности STL, поскольку она играет важную роль. важную роль в получении работы в компаниях нашей мечты.

В этом блоге я расскажу вам все о STL с нуля, чтобы начать свое соревновательное программирование и стать в нем мастером.

Давайте начнем

Рекомендации по тому, что мы сегодня обсуждаем

1. Что такое STL?

2. Типы STL

3. Массивы

4. Итераторы

Что такое СТЛ?

STL — это предопределенные шаблоны или структуры данных в C++, которые можно использовать непосредственно в коде для повышения читабельности кода. Поскольку он играет огромную роль в соревновательном программировании для применения всех структур данных непосредственно в код всякий раз, когда это необходимо. Теперь мы немного обсудим типы STL, а затем сразу перейдем к наиболее распространенным STL, которые будут использоваться в соревновательном программировании.

Типы STL

Существует 4 типа STL.

  1. Последовательные контейнеры
  2. Адаптеры контейнеров
  3. Ассоциативные контейнеры
  4. Неупорядоченные ассоциативные контейнеры

Сейчас я кратко расскажу вам, что представляют собой эти контейнеры, а затем мы перейдем к основной теме — как использовать эти контейнеры в соревновательном программировании.

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, загляните в этот блог.





До встречи в моем следующем блоге, а пока продолжайте учиться и расти.