Презентация Операции с последовательными контейнерами. (Лекция 2) онлайн
На нашем сайте вы можете скачать и просмотреть онлайн доклад-презентацию на тему Операции с последовательными контейнерами. (Лекция 2) абсолютно бесплатно. Урок-презентация на эту тему содержит всего 27 слайдов. Все материалы созданы в программе PowerPoint и имеют формат ppt или же pptx. Материалы и темы для презентаций взяты из открытых источников и загружены их авторами, за качество и достоверность информации в них администрация сайта не отвечает, все права принадлежат их создателям. Если вы нашли то, что искали, отблагодарите авторов - поделитесь ссылкой в социальных сетях, а наш сайт добавьте в закладки.
Презентации » Устройства и комплектующие » Операции с последовательными контейнерами. (Лекция 2)
Оцените!
Оцените презентацию от 1 до 5 баллов!
- Тип файла:ppt / pptx (powerpoint)
- Всего слайдов:27 слайдов
- Для класса:1,2,3,4,5,6,7,8,9,10,11
- Размер файла:2.59 MB
- Просмотров:58
- Скачиваний:0
- Автор:неизвестен
Слайды и текст к этой презентации:
№4 слайд
![Замечания Говорят, что](/documents_6/b6405f60806ac8027e06b4d18cf259eb/img3.jpg)
Содержание слайда: Замечания
Говорят, что выполнение функций insert и erase занимает линейное время для векторов и двусторонних очередей, а это означает: время их выполнения пропорционально длине последовательности, хранящейся в контейнере. В противоположность этому
все операции, помеченные галочкой ۷ (без скобок), выполняются за постоянное время, то есть время, необходимое для их выполнения, не зависит от длины последовательности.
Рассмотрим программу использования всех функции для вставки и удаления (push_back, pop_ back, push_front, pop_front, insert и erase).
№11 слайд
![Замечания Рассмотрим](/documents_6/b6405f60806ac8027e06b4d18cf259eb/img10.jpg)
Содержание слайда: Замечания
Рассмотрим употребление const в первых двух строчках функции showlist :
void showlist(const char *str, const list<int> &L)
{ list<int>::const_iterator i; …
Добавление приставки const к параметрам типа указатель или ссылка, как это сделано выше, является хорошей практикой, если такие параметры не используются для модификации объектов, на которые они указывают. Поскольку функция showlist не модифицирует ни строку str, ни список L, отсюда происходят два употребления слова const на первой из этих двух строчек.
№12 слайд
![Замечания На второй строчке](/documents_6/b6405f60806ac8027e06b4d18cf259eb/img11.jpg)
Содержание слайда: Замечания
На второй строчке мы должны объявить переменную i типа const_iterator, чтобы иметь возможность использовать ее вместе с L. Это похоже на применение модификатора const к указателям: если хотим присвоить вышеобъявленный параметр str указателю р, мы сможем сделать это, только использовав const при объявлении этого указателя:
const char *p; // const необходим, поскольку str
р = str; // описан как const char *str
// типа const char *
№14 слайд
![Сортировка вектора include lt](/documents_6/b6405f60806ac8027e06b4d18cf259eb/img13.jpg)
Содержание слайда: Сортировка вектора
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int vector_sort1()
{ vector<int> v; int x;
cout << "Enter positive integers, followed by 0:\n";
while (cin >> x, x != 0) v.push_back(x);
sort (v.begin(), v.end());
cout << "After sorting: \n" ;
vector<int>::iterator i;
for (i=v.begin();i != v.end(); ++i)
cout << *i << " " ;
cout << endl;
return 0;
}
№15 слайд
![Замечания Вывод этой](/documents_6/b6405f60806ac8027e06b4d18cf259eb/img14.jpg)
Содержание слайда: Замечания
Вывод этой программы содержит введенные пользователем целые числа, отсортированные в восходящем порядке.
Вышеприведенный вызов функции sort отличается от вызовов push back, insert, begin и др. Поскольку мы пишем не v.sort(...), а просто sort(...), видно, что sort является не функцией-членом класса vector, а шаблонной функцией, которая не является членом класса. Технический термин, обозначающий такую шаблонную функцию в STL,- обобщенный (generic) алгоритм, или просто алгоритм. Строчка
#include <algorithm>
необходима, поскольку мы используем алгоритм sort.
№16 слайд
![Сортировка массива include lt](/documents_6/b6405f60806ac8027e06b4d18cf259eb/img15.jpg)
Содержание слайда: Сортировка массива
#include <iostream>
#include <algorithm>
using namespace std;
int sort2()
{ int a[10], x, n = 0, *p;
cout << "Enter at most 10 positive integers, followed by 0:\n";
while (cin >> x, x != 0 && n < 10) a[n++] = x;
sort(a, a+n);
cout << "After sorting: \n";
for (p=a; p != a+n; p++) cout << *p << " ";
cout << endl; return 0; }
Важно заметить сходство между вызовами:
sort(v.begin(), v.end()); // в программе sort1.cpp и
sort(a, a+n); // в программе sort2.cpp.
Второй аргумент ссылается на позицию, находящуюся непосредственно после последнего элемента.
№18 слайд
![Сортировка](/documents_6/b6405f60806ac8027e06b4d18cf259eb/img17.jpg)
Содержание слайда: Сортировка подпоследовательности вектора
В программе sort1.cpp в векторе v также отсортируем v[3], v[4], v[5] и v[6], написав:
vector<int> v;
vector<int>::iterator i, j;
i = v.begin() + 3;
j = v.begin() + 7;
sort (i, j); или
sort (v.begin() + 3, v.begin() + 7);
Доступ по индексу возможен, т.к. вектор является контейнером произвольного доступа, для которого определен operator[] доступа по индексу. Но, мы не можем заменить v[3] на
*(v + 3), потому что тип переменной v является классом, для которого не определен ни бинарный оператор +, ни унарный оператор *.
№19 слайд
![Алгоритм STL sort Алгоритм](/documents_6/b6405f60806ac8027e06b4d18cf259eb/img18.jpg)
Содержание слайда: Алгоритм STL sort
Алгоритм sort требует произвольного доступа. Такой доступ обеспечивают векторы, массивы и двусторонние очереди, поэтому мы могли использовать этот алгоритм в программах sort1.cpp и sort2.cpp.
Вызов sort (v.begin () , v.end());
будет работать, если мы в программ заменим всюду vector на deque, но не на list.
Список не обеспечивает произвольного доступа, поэтому с нему не применим алгоритм sort. Для сортировки списка используется метод sort() самого класса list. Например, L.sort();
№20 слайд
![Инициализация контейнеров int](/documents_6/b6405f60806ac8027e06b4d18cf259eb/img19.jpg)
Содержание слайда: Инициализация контейнеров
int a[3] = {10, 5, 7}; // инициализация массива
int b[ ] = {8, 13}; // эквивалентно int b[2] = {8, 13};
int c[3] = {4}; // эквивалентно int c[3] = {4, 0, 0};
Инициализация также возможна и для трех других типов последовательных контейнеров:
vector<int> v(a, a+3); // int a[3] = {10, 5, 7};
deque<int> w(a, a+3);
list<int> x(a, a+3);
Но не только массив, а также vector, deque и list могут служить основой для инициализации контейнера того же типа:
vector<int> v1(v.begin(), v.end());
вектор v1 станет идентичен вектору v, оба будут состоять из трех элементов типа int: 10, 5 и 7.
№21 слайд
![Инициализация контейнеров](/documents_6/b6405f60806ac8027e06b4d18cf259eb/img20.jpg)
Содержание слайда: Инициализация контейнеров
Однако, мы не можем использовать значения списка х для инициализации вектора v1.
vector<int> v1(x.begin(), x.end()); // не откомпилируется
Способ инициализации обеспечивается конструкторами контейнерных классов. Существуют конструкторы, у которых первый параметр указывает размер и второй (необязательный) – значения всех элементов; можно написать:
vector<int> v(5,8); // Пять элементов, все = равны 8.
vector<int> v(5);
В последнем случае вектор v будет содержать пять элементов, присваивать значения элементам будем позже.
№22 слайд
![Алгоритм find include lt](/documents_6/b6405f60806ac8027e06b4d18cf259eb/img21.jpg)
Содержание слайда: Алгоритм find
#include <vector>
#include <algorithm>
using namespace std;
int find1()
{ vector<int> v; int x;
cout << "Enter positive integers, followed by 0:\n";
while (cin >> x, x != 0)
v.push_back(x);
cout << "Value to be searched for: "; cin >> x;
vector<int>::iterator i = find(v.begin() , v.end(), x);
if (i == v.end()) cout << "Not found\n";
else
{ cout << "Found";
if (i == v.begin()) cout << " as the first element";
else cout << " after " << *--i;
} // Алгоритм find применим к вектору,
cout << endl; // двуст-й очереди, списку и массиву
return 0;
}
№23 слайд
![Алгоритм find для массива](/documents_6/b6405f60806ac8027e06b4d18cf259eb/img22.jpg)
Содержание слайда: Алгоритм find для массива
#include <vector>
#include <algorithm>
using namespace std;
int find2()
{
int a[10] , x, n = 0;
cout << "Enter at most 10 integers, followed by 0:\n";
while (cin >> x, x != 0 && n < 10) a[n++] = x;
cout << "Value to be searched for: "; cin >> x;
int *p = find (a, a+n, x) ;
if (p == a+n) cout << "Not found\n";
else
{ cout << "Found";
if (p== a) cout << " as the first element";
else cout << " after " << *--p;
}
cout << endl;
return 0;
}
№24 слайд
![Алгоритм copy copy .cpp](/documents_6/b6405f60806ac8027e06b4d18cf259eb/img23.jpg)
Содержание слайда: Алгоритм copy
// copy1.cpp: Копируем вектор в список.
// Первая версия: режим замещения.
#include <vector>
#include <list>
int copy_vector_list1()
{
int a[4] = {10, 20, 30, 40};
vector<int> v(a, a+4);
list<int> L(4); // Список из 4 элементов
copy(v.begin(), v.end(), L.begin());
list<int>::iterator i;
for (i=L.begin(); i != L.end(); ++i)
cout << *i << " "; // Результат: 10 20 30 40
cout << endl;
return 0;
}
№25 слайд
![Алгоритм copy и итератор](/documents_6/b6405f60806ac8027e06b4d18cf259eb/img24.jpg)
Содержание слайда: Алгоритм copy и итератор вставки
Рассмотрим режим вставки.
list<int> L; // Пустой список.
Заменим вызов алгоритма сору на следующий:
copy(v.begin(), v.end(), inserter(L, L.begin()));
inserter(…) называется итератором вставки.
// сору2.срр: Вторая версия: режим вставки.
int copy_vector_list2()
{ int a[4] = {10, 20, 30, 40};
vector<int> v(a, a+4);
list<int> L(5, 123); // 5 элементов, каждый =123
list<int>:: iterator i = L.begin(); // ++i; ++i;
advance (i, 3); // приращение итератора
copy(v.begin(), v.end(), inserter(L, i));
for (i=L.begin(); i != L.end(); ++i)
cout << *i << " "; cout << endl; return 0;
} // Результат: 123 123 10 20 30 40 123 123 123
№26 слайд
![Краткие выводы Были](/documents_6/b6405f60806ac8027e06b4d18cf259eb/img25.jpg)
Содержание слайда: Краткие выводы
Были рассмотрены операции с последовательными контейнерами (push_back, pop_ back, push_front, pop_front, insert и erase).
Были рассмотнрены алгоритмы (#include <algorithm> ):
- сортировки (векторы, массивы, двуст. очереди), для списка этот алгоритм не применим, используется метод метод sort() самого класса list.
sort (v.begin(), v.end());
sort([&a[3], &а[7]);
Но L.sort();
- поиска (векторы, массивы, двуст. очереди, списки)
i = find(v.begin() , v.end(), x);
int *p = find (a, a+n, x) ; - для массива
Скачать все slide презентации Операции с последовательными контейнерами. (Лекция 2) одним архивом:
Похожие презентации
-
Операции и выражения. (Лекция 4)
-
Операционная система Windows. Программирование с использованием средств Win32 API. (Лекция 2)
-
Массивы. Ввод и вывод одномерных и двухмерных массивов. Операции над массивами. Лекция 16
-
Операции присваивания, условная операция. Приоритеты операций и порядок вычислений. Лекция 11
-
Операции арифметические, сравнения, логические и поразрядные. Лекция 10
-
Константы. Операции и знаки операций. Массивы, инициализаторы коллекций и перечисления
-
Программирование на языке Java. Примитивные типы данных. Операции, комментарии. (Лекция 2. 1)
-
Основные операции. Базовые управляющие конструкции структурного программирования. (Лекция 2. 2)
-
Операция объединения merge. Категории итераторов. (Лекция 3)
-
Программирование на языке С. Лекция 6. Операции и операторы