Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Контейнер Vector – динамический массив⇐ ПредыдущаяСтр 13 из 13
Вектор – самый популярный контейнер. Это массив объектов, основное и замечательное отличие которого от обычных массивов в том, что память, занимаемая массивом объектов, может меняться при выполнении программы. Для обычных массивов это невозможно: либо память выделяется статически при описании 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; просмотров: 102; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.226.222.12 (0.018 с.) |