Динамический массив vector
Сегодня мы поговорим о достаточно полезной штуке в C++ - динамическом массиве vector. Но для начала нужно сказать несколько слов о шаблонах в С++.
Обобщенное программирование
Обобщенное программирование - это парадигма программирования, поддерживается такими языками, как C++, Java, C#, Object Pascal. Суть заключается в таком описании данных и алгоритмов, которые можно применить к нескольким типам данных без изменения описания. Шаблон в C++ - средство, созданное для описания обобщенных алгоритмов, функций, классов.
Рассмотрим простой пример. Мы хотим написать Калькулятор, а конкрено функцию деления. Вам уже наверняка известно, что деление целых и дробных чисел приводит к различному результату. Чтобы не писать по многу раз одно и тоже, нам достаточно написать шаблон функции:
Теперь можем вызвать функцию div, при этом указав тип в угловых скобках.
Сообщество программистов заранее позаботилось, и чтобы не писать каждый раз шаблоны, они разработали STL (Standart Template Library - Стандартная Биоблиотека Шаблонов).
Standart Template Library (STL, стандаотная библиотека шаблонов) - это особый набор обобщенных алгоритмов и контейнеров. Когда мы говорим “обобщенные” мы подразумеваем, что данные алгоритмы/контейнеры могут работать с любым типом данных, в том числе и с типом, который определил пользователь.
STL является мощной составляющей частью языка C++. В дальнейшем мы будем рассматривать контейнеры из этой библиотеки.
std::vector
Начнем мы с vector. Чтобы лучше понять, что такое vector, представьте себе обычный массив. А теперь представьте что мы можем изменять его размер. Это означает, что vector - это динамический массив. Данный шаблон расположен в заголовчном файле
У vector имеются свои методы. Рассмотрим некоторые из них.
push_back(…) | Вставка элемента в конец вектора |
pop_back(…) | Очищает последний элемент вектора |
resize(…) | Изменяет размер вектора |
empty(…) | Возвращает true, если вектор пуст |
Также можем заполнить вектор в цикле:
К заполненному вектору мы можем обращаться как к массиву:
Обращение к несуществующей ячейке вектора приведет к ошибке.
Некоторое время назад мы говорили об итераторах. Напомним, что итератор - такая вещь, предоставляющая доступ к элементам коллекции(вектору в данном случае). Итераторы создаются при помощи таких стандартных методов как begin() и end(). Функция begin() возвращает указатель на первый элемент, а end() — на воображаемый несуществующий элемент, следующий за последним.
Пример: мы ввели число элементов последовательности и саму последовательность. Нужно найти её сумму.
Цикл for, основанный на диапазоне
На самом деле, код написанный нами выше, можно переписать в более удобночитаемый. Это можно достигнуть при помощи for - each.
Как вы видите, в приведенном коде мы не соприкоснулись с указателями(на первый взгляд). Однако то, что мы написали выше (vector