Стандартная библиотека шаблонов C ++ VECTORS 📚

C ++ - моя девочка. Я ❤️ C ++. Многие люди думают, что C ++ уродлив и ужасен для работы, поэтому я решил, почему бы не создать серию статей, которые помогут расчистить путь и сориентироваться в прекрасных особенностях языка 😍.

Начните с векторов C ++ и стандартной библиотеки шаблонов.

В C ++ вы можете включить библиотеку под названием vector в дополнение к стандартной стандартной библиотеке iostream C ++.

#include - это директива препроцессора, которая сообщает компилятору о необходимости включения любой следующей библиотеки, в нашем случае это стандартная векторная библиотека. Поскольку мы будем работать со стандартной библиотекой шаблонов, мы будем использовать стандартное пространство имен, что упрощает нашу жизнь.

#include <iostream>
#include <vector>
using namespace std;

Инициализация и заполнение

Пришло время инициализировать и вставить несколько векторов.

Автоматическое изменение размера

Первая часть инициализации вектора - это передача типа через класс. Векторы - это шаблонный класс, поэтому при определении мы должны сообщить компилятору, с каким типом мы планируем работать. Затем мы можем следовать за объявлением типа по имени, которое мы хотим назвать вектором.

vector<int> myVector;

Размеры векторов изменяются автоматически. Когда мы объявляем вектор, как мы делали выше, мы можем просто возвращать элементы, чтобы заполнить наш вектор.

// populating our vector using push_back
myVector.push_back(4);
myVector.push_back(7);
myVector.push_back(2);
// our vector now has three values [4, 7, 2]

Предполагая

Другой способ инициализации вектора - это предварительное определение вектора. Мы можем задать для наших значений размер и начальные значения или оставить значение по умолчанию 0.

vector<int> mySecondVector(3); // presized vector [0,0,0]
vector<int> myThirdVector(3,7); // presized with value [7,7,7]

Внутри класса векторов оператор квадратных скобок перегружен (подробнее о перегрузке операторов в будущем руководстве). Перегруженный оператор квадратных скобок позволяет нам напрямую изменять значение различных позиций нашего вектора. При использовании оператора квадратной скобки следует помнить, что векторы имеют индекс, отсчитываемый от нуля. Вектор размером 3 не может получить доступ к третьему элементу, выполняя [3], а скорее [2].

mySecondVector[1] = 8 // [0, 8, 0]
mySecondVector[0] = 9 // [9, 8, 0]
mySecondVector[2] = 3 // [9, 8, 3]
mySecondVector[3] = 8 // will not work. subscript out of range error

Примечание. В векторах с предварительно заданным размером вы все равно можете использовать функцию возврата изменения размера, чтобы добавить больше значений за пределами диапазона.

mySecondVector.push_back(8) // will work [9, 8, 3, 8]

Отлично Наш вектор инициализирован и заполнен, давайте распечатаем эти значения в.

Итерация

Есть несколько способов перебора вектора, и некоторые из них стали намного проще благодаря синтаксису C + 11. Я покажу старый способ и обновленную версию.

На основе индекса

Наиболее часто встречающийся способ перебора вектора - использование цикла for на основе индекса.

for (int i = 0; i < myVector.size(); i++) {
   cout << myVector[i] << " " << flush;
}

На основе итератора

Самая общая версия и фактически рекомендуется вместо цикла for на основе индекса, потому что это способ итерации, который включает последовательные контейнеры, списки и ассоциативные контейнеры.

for (vector<int>::iterator it = myVector.begin(); it != myVector.end(); it++) {
   cout << *it << " " << flush;
}

С ключевым словом auto в C + 11 цикл for на основе итератора выглядит намного лучше, а дополнительный синтаксис, описанный выше, обрабатывается под капотом.

for (auto it = myVector.begin(); it != myVector.end(); it++) {
   cout << *it << " " << flush;
}

Гораздо приятнее полежать.

На основе диапазона

Для прямого доступа к элементу диапазон на основе цикла for входит в clutch. Однако обратная сторона медали: получить индекс довольно сложно, и вы не можете использовать разные шаги.

for (auto element: myVector) {
   cout << element << " " << flush;
}

C позволяет легко прострелить себе ногу; C ++ усложняет задачу, но когда вы делаете это, он отрывает вам всю ногу .
- Бьярн Страуструп (создатель C ++)

На этом пока все, ребята. Следуй за мной в Интернете @theflawlesshack