Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Контейнер Vector – динамический массивСодержание книги
Поиск на нашем сайте Вектор – самый популярный контейнер. Это массив объектов, основное и замечательное отличие которого от обычных массивов в том, что память, занимаемая массивом объектов, может меняться при выполнении программы. Для обычных массивов это невозможно: либо память выделяется статически при описании int a[100], либо при выполнении программы a = new int [n], а затем изменяться не может (только освободить память и взять заново). В классе вектор имеется 4 конструктора: · vector() – конструктор по умолчанию, пустой вектор;
vector <int> v;
· vector(кол-во[, знач.]) – количество элементов со значением знач vector <char> s(10, ’*’); · vector(итератор_начала, итератор_конца) – инициализация диапозоном · vector(объект_контейнер) – конструктор копирования
vector<char> s1(s);
К элементам вектора можно обращаться по индексу или через итератор (указатель), как и для обычных массивов (a[i] или *(a + i)). В классе vector перегружены операции сравнения == < <= != > >= и определено 33 ч/функции. Назовем основные функции: size () – текущий размер массива, push _ back (знач) – поместить значение в конец массива, size() растет, pop _ back () – удаляет последний элемент, size() уменьшается, begin () – возвращает итератор начала вектора, end () – возвращает итератор конца вектора, insert (итератор, значение) – вставляет в массив значение перед элементом, указанным итератором, erase (итератор) – удаляет элемент, на который указывает итератор, возвращает итератор элемента за удаленным, clear () – удаляет все элементы вектора, empty () – возвращает истину, если вектор пуст, и ложь, если нет. Заметим, что во всех контейнерах набор перегруженных операций и член-функций практически одинаковый, кроме некоторых специфических для данного класса. Пример 1. Из созданного массива случайных чисел переписать в другой массив четные числа #include <iostream.h> #include <vector.h> #include <stdlib.h> #include <conio.h> void main() { vector <int> v1, v2; // 2 пустых массива int i,j; randomize(); for(i = 0; i < 10; i++) v1.push_back(random(30)); // поместить в конец – размер растет cout << "Создан массив:\n"; for(i = 0; i < v1.size(); i++) // цикл по размеру cout << v1[i] << ' '; for(i = 0; i < v1.size(); i++) if(v1[i] % 2 == 0) v2.push_back(v1[i]); // добавить в v2 четные cout << "\nЧетные числа:\n" << v2.size() << endl; for(i = 0; i < v2.size(); i++) // v2.size() – сколько добавили cout << v2[i] << ' '; getch(); }
Пример 2. Из созданного массива случайных чисел удалить нули. Используется итератор.
#include <iostream.h> #include <vector.h> #include <stdlib.h> void main() {vector <int> v; int i, j; randomize(); for(i = 0; i < 20; i++) v.push_back(random(5)); cout << "Создан массив:\n"; for(i = 0; i < v.size(); i++) cout << v[i] << ' '; vector <int>:: iterator pv = v.begin(); // эквивалентно int *pv = v; while (pv!= v.end()) {if (*pv == 0) pv = v.erase(pv); //удалить нуль и сократить массив else pv++;} cout << "\n Осталось элементов " << v.size() << ":\n"; for(i = 0; i < v.size(); i++) cout << v[i] << ' '; // или используя итератор /* for(p = v.begin(); p!= v.end(); p++) cout << *p << ' '; */ } Контейнер list – список
В классе имеется 4 конструктора, перегружены операции сравнения и определены 42 член-функции. Так как список двунаправленный, то добавление и удаление выполняется как с начала, так и с конца. Ниже на рисунке приведены основные операции для работы со списком
push _ front ( значение ) – добавить в начало, push _ back ( значение ) – добавить в конец, pop _ front () – удалить с начала, pop _ back () – удалить с конца, insert ( итератор,значение ) – вставить в середину, место указывается итератором, erase ( итератор ) – удалить из середины, место указывается итератором, front () – возвращается значение элемента с начала списка, back () – возвращается значение элемента с конца списка. Пример. Сортировка прямым выбором: минимальное число находится в исходном списке, удаляется из него и добавляется в новый список
#include <list.h> #include <iostream.h> #include <conio.h> int main(int argc, char* argv[]) {list <int> l1, l2; int i, k; cout << "\nlist:"; for(i = 0; i < 10; i++) l1.push_back(random(30)); list <int>:: iterator pl, pmin; cout << "\nВывод через Iterator:"; for(pl = l1.begin(); pl!= l1.end(); pl++) cout << *pl << ' '; while (!l1.empty()) {pmin = min_element(l1.begin(),l1.end()); // из algorithm.h l2.push_back(*pmin); // добавить в список l2 l1.erase(pmin); // удалить минимум из списка l1 } cout << "\n rezult: "; for(pl = l2.begin(); pl!= l2.end(); pl++) cout << *pl << ' '; return 0; } Контейнер Set – множество Контейнер Set определяет математическое множество объектов. Основное достоинство класса в том, что во множество не добавляются одинаковые объекты. Добавление во множество, в отличие от предыдущих контейнеров, выполняется функцией класса insert ( значение ). Пример. Определить множество различных символов в заданном тексте.
#include <set.h> #include <string.h> #include <conio.h> #include <iostream.h> int main(int argc, char* argv[]) {set <char> s; char * ss = “программируйте, улыбаясь!”; for(int i = 0; i < ss[i]; i++) s.insert(ss[i]); set <char>:: iterator ps; cout << "\nsize set = " << s.size(); // 20 различных символов for(ps = s.begin(); ps!= s.end();ps++) // вывод их, используя итератор cout << *ps; return 0; } Содержание
Введение. Принципы объектно-ориентированного программирования Глава 1. Классы и объекты 1. Новые возможности языка С++ 1.1. Операция разрешения области видимости:: 1.2. Перечислимый тип. 1.3. Модификатор const 1.4.Новый тип данных – ссылка &. 1.5. Функции в Си++ 2. Определение класса. Сокрытие информации. 3. Объект. 4. Конструкторы и деструкторы 4.1.Назначение конструктора 4.2. Конструктор копирования. 4.3. Деструктор 5. Неявный указатель this 6. Перегрузка операций 7. Примеры перегрузки некоторых операций 7.1. Перегрузка операции [ ] 7.2. Перегрузка операции () 7.3. Перегрузка операции = 7.4. Перегрузки операций + и += 7.5. Перегрузка операции ++ 7.6. Перегрузка операции (тип) 8. Дружественность 9. Перегрузка операций потокового ввода >> и вывода <<. 10. Массивы объектов. 11. Функции- и классы-шаблоны 11.1 Функции-шаблоны (родовые функции) 11.2. Классы-шаблоны 12. Член-данные класса – объекты другого класса: агрегированные классы. Глава 2. Наследование. Полиморфизм 1. Базовый и порожденный классы 2. Конструкторы порожденного класса 3. Стандартные преобразования при наследовании 4. Множественное наследование. Виртуальный базовый класс 4.1. Прямые базовые классы 4.2. Виртуальный базовый класс 5. Полиморфизм, раннее и позднее связывание, виртуальные функции 5.1 Раннее (статическое) и позднее (динамическое) связывание 5.2. Определение виртуальной функции 5.3. Чистая виртуальная функция и абстрактный класс 5.4. Правила определения виртуальных функций 5.5. Механизм позднего связывания
6. Библиотека fstream – работа с файлами Глава 3. Библиотека стандартных шаблонов (БСШ). Контейнеры 1. Контейнер. Структура БСШ. 2. Контейнер Vector – динамический массив Контейнер list – список 4. Контейнер Set – множество Содержание
|
||
|
Последнее изменение этой страницы: 2021-12-07; просмотров: 361; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.236 (0.009 с.) |