Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Programmirovanie.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
373.72 Кб
Скачать

31. Последовательные контейнеры.

Операция

Метод

vector

deque

list

Вставка в начало

push_front

-

+

+

Удаление из начала

pop_front

-

+

+

Вставка в конец

push_back

+

+

+

Удаление из конца

pop_back

+

+

+

Вставка в произвольное место

insert

+

+

+

Удаление из произвольного места

erase

+

+

+

Произвольный доступ к элементу

[], at

+

+

-

Примеры создания векторов:

vector <int> v2(10,1); //Создается вектор из 10 равных единице элементов: vector <int> v4 (v1); //Создается вектор, равный вектору v1 vector <int> v3 (v1.begin(), v1.begin() + 2); //Создается вектор из двух элементов, равных первым двум элементам v1 vector <monstr> m1 (10); //Создается вектор из 10 объектов класса monstr vector <monstr> m2(5,monstr("Вася"));//Создается вектор из 5 объектов класса monstr с заданным именем Например: vector <int> v1,v2; //Первым 10 элементам вектора v1 присваивается значение 1: v1.assign(10,1); //Первым 3 элементам вектора v2 присваиваются значения v1[5], v1[6], v1[7]: Ввод-вывод вектора из дробных чисел. #include <iostream> #include <vector> using namespace std; int main(int argc, char* argv[]) { using N=5; vector <double> a; //объявление вектора дробных чисел for(unsigned i=0; i<N;i++) { double x; //считываем дробное число с клавиатуры cout <<"a["<<i<<"]="; cin >> x; a.push_back(x); }//и добавляем его в конец вектора вывод вектора на экран for (unsigned i=0; i<a.size(); i++) { cout <<"a["<<i<<"]="<<a[i]<<endl;}return 0;}

Использование шаблонов классов

имя_шаблона <аргументы> имя_объекта [(параметры_конструктора)];

List <<int> List_int; List<double> List_double;

for (int i=1;i<10;i++) List_double.add(i*0.08); List_double.print(); strcpy(buf,"Важное сообщение"); cout<<buf<<endl;

Специализация шаблонов классов

Каждая версия классов или функций, создаваемая по шаблону содержит одинаковый базовый код. Изменяется только то, что связано с параметрами шаблона. При этом эффективность работы версий, создаваемых для различных типов данных может сильно различаться. Если для какого либо типа данных существует более эффективный код можно либо предусмотреть для этого типа специальную реализацию методов, либо полностью переопределить шаблон. Для переопределенного метода требуется определить вариант его кода указав в заголовке конкретный тип данных.

template <class Data> void List <Data>::print();

void List <char>::print(){ ...//Тело специализированного варианта метода print }

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]