Основные элементы языка программирования Си алфавит, идентификаторы, ключевые слова, константы
Скачать 0.78 Mb.
|
34.Стандартная библиотека шаблонов (STL), назначение библиотеки, основные компоненты библиотеки (контейнеры, итераторы, алгоритмы). Стандартная библиотека шаблонов (STL – standard template library) - ядро стандартной библиотеки языка Си++. Все компоненты библиотеки шаблоны классов, шаблоны позволяют внутри себя использовать любые типы данных (с некоторыми ограничениями). Компоненты библиотеки • Контейнеры; • Итераторы; • Алгоритмы. Контейнеры используются для управления коллекциями объектов определенного типа (массивы, вектора, списки очереди, множества, хеш-таблицы и т.п.). Итераторы используются для обхода элементов в контейнерах. Алгоритмы (это глобальные функции библиотеки) используются для обработки элементов контейнеров (сортировка, поиск, модификация и др.). В некотором смысле концепция библиотеки противоречит исходной идеи ООП: отделяет данные от алгоритмов, а не объединяет их. 35.Контейнеры стандартной библиотеки шаблонов (STL), классификация. Контейнеры 1. Последовательные контейнеры - упорядоченные коллекции, в которых каждый элемент занимает определенную позицию. Позиция зависит от времени и места вставки, но не зависит от значения элемента. Шаблоны классов: array, vector, deque, list, forward_list (стандарт С++ 11). 2. Упорядоченные (ассоциативные) контейнеры - позиция элемента зависит от его значения (или ключа, если элемент представляет собой пару «ключ-значение»). Шаблоны классов: set, multiset, map, multimap. 3. Неупорядоченные контейнеры – позиция элемента не имеет значение. Шаблоны классов: unordered_set, unordered_multiset, unordered_map, unordered_multimap Некоторые общие свойства контейнеров Определения типов (typedefs): reference - предоставляет ссылку на элемент, хранящийся в контейнере. iterator - предоставляет итератор произвольного доступа, который может читать или изменять любой элемент в контейнере. reverse_iterator - итератор для перемещения в обратном контейнере. value_type - представляет тип данных, хранящихся в контейнере. Методы: at - возвращает ссылку на элемент в заданном положении в контейнере по индексу (array, vector, deque). begin - возвращает итератор, указывающий на первый элемент (cbegin константный итератор) end (cend)- возвращает итератор произвольного доступа, который указывает на конец контейнера. rbegin - возвращает итератор, указывающий на первый элемент в обратном контейнере. rend - возвращает итератор, который указывает на последний элемент в обратном контейнере. size - возвращает количество элементов в контейнере (кроме односвязного списка). resize – устанавливает новый размер контейнера. swap - меняет местами элементы двух контейнеров. clear – очистка контейнера (кроме array). empty – проверяет является контейнер пустой или нет. Перегруженные операции: operator!= operator< operator<= operator==operator> operator>= operator[] (длямассива, вектораидека). operator = ?????????? 36.Особенности последовательных контейнеров: vector, deque, list. Последовательные контейнеры Шаблон класса vector (Вектор) Вектор управляет элементами, хранящимися в динамическом массиве. Он обеспечивает произвольный доступ к элементам, т.е. к каждому элементу можно обратиться напрямую по соответствующему индексу. Добавление и удаление элементов происходит в конце массива и выполняется, как правило, быстро. Вставка элемента в середину или в начало массива занимает достаточно много времени, т.к. требуется перемещать остальные элементы. Специальные методы vector: capacity - Возвращает число элементов, которое вектор может содержать без выделения дополнительного пространства. insert - Вставляет элемент или некоторое число элементов в вектор с заданной позиции. pop_back - Удаляет элемент в конце вектора. push_back - Добавляет элемент в конец вектора. Шаблон класса list: Реализован как двухсвязный список элементов. Некоторые дополнительные методы: back - Возвращает ссылку на последний элемент в списке. erase - Удаляет элемент или диапазон элементов с указанных положений в списке. front - Возвращает ссылку на первый элемент в списке. insert - Вставляет элемент или количество элементов или диапазон элементов в указанное положение в списке. pop_back - Удаляет элемент в конце списка. pop_front - Удаляет элемент в начале списка. push_back - Добавляет элемент в конец списка. push_front - Добавляет элемент в начало списка. remove - Удаляет из списка элементы, совпадающие с заданным значением. reverse - Изменяет порядок следования элементов в списке на обратный. sort - Упорядочивает элементы списка. Пример на list: #include #include #include using namespace std; int main() { list // Добавляет элементы в список for (char c = 'a'; c <= 'z'; ++c) { coll.push_back(c); } coll.reverse(); // Переписываем элементы в обратном порядке // Печать всех элементов for (auto elem: coll) { cout << elem << ' '; } cout << endl; coll.sort(); // Очистка списка while (!coll.empty()) { cout << coll.front() << ' '; coll.pop_front(); } cout << endl; } Шаблон класса deque: Дек (deque) (от double-ended queue - двусторонняя очередь). Дек – динамический массив, реализованный таким образом, что он может расти в обоих направлениях. Вставка элемента в конец или начало выполняется быстро, вставка в середину медленнее, так как надо сдвигать другие элементы. Пример на deque: #include #include using namespace std; int main() { deque // Добавляем элементы for (int i = 1; i <= 10; ++i) { if (i % 2) coll.push_front(i * 1.1); // В начало else coll.push_back(i * 10.1); // В конец } // Печать всех элементов for (int i = 0; i < coll.size(); ++i) { cout << coll[i] << ' '; } cout << endl; } 37.Особенности контейнеров стандартной библиотеки шаблонов (STL) std::set и std::multiset. Множество (шаблон set) - контейнер в котором элементы сортируются в соответствии со своими значениями, дубликаты не допускаются. #include #include using namespace std; void main() { // Множество целых чисел set // Добавляем элементы // - Дважды добавляется элемент со значением 1 coll.insert(3); coll.insert(1); coll.insert(5); coll.insert(4); coll.insert(1); // Второе добавление 1 не работает coll.insert(6); coll.insert(2); // Печать всех элементов for (auto pos: coll) { std::cout << pos << ' '; } cout << endl; } Мультимножество (шаблон multiset) – множество, в котором разрешены дубликаты. #include #include #include using namespace std; void main() { // Множество объектов string multiset "Braunschweig", "Hanover", "Frankfurt", "New York", "Chicago", "Toronto", "Paris", "Frankfurt" }; // Печать всех элементов for (const auto &elem: cities) { cout << elem << " "; } cout << endl; // Добавление новых элементов cities.insert({"London", "Munich", "Hanover", "Braunschweig"}); // Печать всех элементов for (const auto &elem: cities) { cout << elem << " "; } cout << endl; } Основные методы: insert - вставляет элемент или диапазон элементов. erase - удаляет элемент или диапазон элементов. find - возвращает итератор, который обращается к местоположению элемента в наборе с ключом. 38.Особенности контейнеров стандартной библиотеки шаблонов (STL) std::map и std::multimap. Карта (отображение) (шаблон map) – содержит пары «ключ-значение», ключ используется для сортировки, дубликаты ключей запрещены. Мультикарта (мультиотображение) (шаблон multimap) – карта в которой разрешены дубликаты. #include |