Курс ООП в С презентация. ООП в с++(полный курс). Объекты и классы
Скачать 1.76 Mb.
|
Контейнерные классыИспользование последовательных контейнеров К основным последовательным контейнерам относятся: Контейнер вектор (vector), является аналогом обычного массива, за исключением того, что он автоматически выделяет и освобождает память по мере необходимости. Контейнер эффективно обрабатывает произвольную выборку элементов с помощью операции индексации [] или метода at. Однако вставка элемента в любую позицию, кроме конца вектора, неэффективна. Для этого потребуется сдвинуть все последующие элементы путем копирования их значений. По этой же причине неэффективным является удаление любого элемента, кроме последнего. Контейнер список (list) организует хранение объектов в виде двусвязного списка. Каждый элемент списка содержит три поля: значение элемента, указатель на предшествующий и указатель на последующий элементы списка. Вставка и удаление работают эффективно для любой позиции элемента в списке. Однако список не поддерживает произвольного доступа к своим элементам: например, для выборки n-го элемента нужно последовательно выбрать предыдущие n-1 элементов. Контейнер двусторонняя очередь (deque) во многом аналогичен вектору, элементы хранятся в непрерывной области памяти. Но в отличие от вектора двусторонняя очередь эффективно поддерживает вставку и удаление первого элемента (так же, как и последнего). Контейнерные классыСуществует пять способов определить объект для последовательного контейнера.
vector Создать контейнер заданного размера и инициализировать его элементы значениями по умолчанию: vector list Создать контейнер заданного размера и инициализировать его элементы указанным значением: //создаем вектор из 100 элементов и инициализируем их нулями: vector //создаем очередь из 300 элементов и инициализируем их нулями: deque Контейнерные классы
//создаем и инициализируем массив из 7 элементов int array[7] = (15, 2, 19, -3, 28, 6, 8); //создаем вектор и инициализируем его элементами массива, //array – указатель на первый элемент массива vector //создаем список и инициализируем его элементами вектора, //VI.begin() – метод, который возвращает указатель на //первый элемент массива, VI.end() – возвращает указатель //на фиктивный элемент, следующий за последним list Создать контейнер и инициализировать его элементы значениями элементов другого однотипного контейнера: //создаем и инициализируем элементы нулями: vector //создаем и инициализируем элементами вектора v1: vector Контейнерные классыВЕКТОР для item! И работа с ним. Метод insert имеет следующие реализации:
void insert(iterator pos, size_type n, const T& key); – вставляет n элементов key, начиная с позиции, на которую указывает итератор pos; template void insert(iterator pos, InputIter first, InputIter last); вставляет элементы диапазона first…last, начиная с позиции, накоторую указывает итератор pos. Контейнерные классыvoid main() { vector int m[5] = {1, 2, 3, 4, 5}; //добавили один элемент со значением 100 в начало вектора: v1.insert(v1.begin(), 100); // добавили два элемента со значениями 200 в начало вектора: v1.insert(v1.begin()+1, 2, 200); // добавили пять элементов со значениями из массива m в вектор, // начиная с третьего: v1.insert(v1.begin()+3, m, m+5); //добавили один элемент со значением 100 в конец вектора: v1.insert(v1.end(), 100); //печать вектора for(int i=0; i } Результат выполнения программы: 100 200 200 1 2 3 4 5 0 0 0 0 0 100 |