Презентация, доклад на тему Уроки программирования C++. Урок 13. Стандартная библиотека шаблонов.

Содержание

ИтераторыНикитин Михаил Евгеньевич, 2015ГБПОУ ПК имени П.А. ОвчинниковаДля доступа к элементам некоторого множества элементов алгоритмы stl используют специальные объекты, называемые итераторами.Итератор — объект, позволяющий программисту перебирать все элементы коллекции без учёта особенностей её реализации. Предназначен итератор исключительно

Слайд 1Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А. Овчинникова
ЯЗЫКИ ПРОГРАММИРОВАНИЯ
Стандартная библиотека шаблонов

Никитин Михаил Евгеньевич, 2015ГБПОУ ПК имени П.А. ОвчинниковаЯЗЫКИ ПРОГРАММИРОВАНИЯСтандартная библиотека шаблонов

Слайд 2Итераторы
Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А. Овчинникова
Для доступа к элементам

некоторого множества элементов алгоритмы stl используют специальные объекты, называемые итераторами.
Итератор — объект, позволяющий программисту перебирать все элементы коллекции без учёта особенностей её реализации. Предназначен итератор исключительно для доступа к элементам.


ИтераторыНикитин Михаил Евгеньевич, 2015ГБПОУ ПК имени П.А. ОвчинниковаДля доступа к элементам некоторого множества элементов алгоритмы stl используют

Слайд 3Итераторы
Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А. Овчинникова
Категории итераторов
итератор ввода (input

iterator) - используется потоками ввода;
итератор вывода (output iterator) - используется потоками вывода;
однонаправленный итератор (forward iterator) - для прохода по элементам в одном направлении;

ИтераторыНикитин Михаил Евгеньевич, 2015ГБПОУ ПК имени П.А. ОвчинниковаКатегории итераторовитератор ввода (input iterator) - используется потоками ввода;итератор вывода

Слайд 4Итераторы
Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А. Овчинникова
Категории итераторов
двунаправленный итератор (bidirectional

iterator) - способен пройтись по элементам в любом направлении. Такие итераторы реализованы в некоторых контейнерных типах stl (list, set, multiset, map, multimap);
итераторы произвольного доступа (random access) - через них можно иметь доступ к любому элемента. Такие итераторы реализованы в некоторых контейнерных типах stl (vector, deque, string, array).

ИтераторыНикитин Михаил Евгеньевич, 2015ГБПОУ ПК имени П.А. ОвчинниковаКатегории итераторовдвунаправленный итератор (bidirectional iterator) - способен пройтись по элементам

Слайд 5Итераторы
Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А. Овчинникова

ИтераторыНикитин Михаил Евгеньевич, 2015ГБПОУ ПК имени П.А. Овчинникова

Слайд 6Итераторы
Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А. Овчинникова
Кроме операций для итераторов

определены три функции:
advance (InIt& pos, dist n) - перемещает итератор на указанную дистанцию;
dist distance (InIt pos1, InIt pos2) - вычисляет дистанцию между двумя итераторами;
iter_swap (FIt1 pos1, FIt2 pos2) - обменивает значения указанных итераторов.

ИтераторыНикитин Михаил Евгеньевич, 2015ГБПОУ ПК имени П.А. ОвчинниковаКроме операций для итераторов определены три функции:advance (InIt& pos, dist n)

Слайд 7Контейнеры
Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А. Овчинникова
Многие вычисления подразумевают создание

наборов объектов в различных формах и обработку таких наборов.
Класс, главной целью которого является хранение объектов, называется контейнером.
Реализация контейнеров, подходящих для данной задачи, и поддержка их основными полезными операциями — важнейшие шаги при написании любой программы.
КонтейнерыНикитин Михаил Евгеньевич, 2015ГБПОУ ПК имени П.А. ОвчинниковаМногие вычисления подразумевают создание наборов объектов в различных формах и

Слайд 8Вектор
Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А. Овчинникова
Встроенные массивы имеют фиксированный

размер.
Если мы выберем слишком большой размер, то впустую израсходуем память.
Если же выбранный размер слишком мал, массив может переполниться.
В любом случае нам придется написать код низкого уровня для управления памятью.
Стандартная библиотека предоставляет вектора (vector), которые сами позаботятся об этом
ВекторНикитин Михаил Евгеньевич, 2015ГБПОУ ПК имени П.А. ОвчинниковаВстроенные массивы имеют фиксированный размер. Если мы выберем слишком большой

Слайд 9Вектор
Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А. Овчинникова
Если мы хотим использовать

векторы в своей программе, необходимо подключить заголовочный файл :

#include

Вектор можно объявить следующим образом:
std::vector myVector(10);
std::vector v2(10,2);
std::vector v1;


ВекторНикитин Михаил Евгеньевич, 2015ГБПОУ ПК имени П.А. ОвчинниковаЕсли мы хотим использовать векторы в своей программе, необходимо подключить

Слайд 10Вектор
Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А. Овчинникова
Итераторы
begin() - итератор на первый

элемент;
end() - итератор на элемент идущий после последнего;
rbegin() - итератор на последний элемент (для обратных алгоритмов);
rend() - итератор на позицию перед первым элементом (для обратных алгоритмов).
ВекторНикитин Михаил Евгеньевич, 2015ГБПОУ ПК имени П.А. ОвчинниковаИтераторыbegin() - итератор на первый элемент;end() - итератор на элемент идущий после

Слайд 11Вектор
Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А. Овчинникова
#include

#include
int main(){
std::vector first; // empty vector of ints
std::vector second(4, 100); // four ints with value 100
std::vector third(second.begin(), second.end()); // iterating through second
std::vector fourth(third); // a copy of third
// the iterator constructor can also be used to construct from arrays:
int myints[] = { 16,2,77,29 };
std::vector fifth(myints, myints + sizeof(myints) / sizeof(int));
std::cout << "The contents of fourth are:";
for (std::vector::iterator it = fourth.begin(); it != fourth.end(); ++it)
std::cout << ' ' << *it;
std::cout << std::endl;
std::cout << "The contents of fifth are:";
for (std::vector::iterator it = fifth.begin(); it != fifth.end(); ++it)
std::cout << ' ' << *it;
std::cout << std::endl;
return 0;
}
ВекторНикитин Михаил Евгеньевич, 2015ГБПОУ ПК имени П.А. Овчинникова  #include  #include  int main(){

Слайд 12Вектор
Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А. Овчинникова
#include

#include

int main()
{
std::vector myvector(5); // 5 default-constructed ints
for (int i = 0; i < myvector.size(); ++i)
myvector[i] = i;
std::cout << "myvector contains:";
std::vector::reverse_iterator rit = myvector.rbegin();
for (; rit != myvector.rend(); ++rit)
std::cout << ' ' << *rit;
std::cout << std::endl;
return 0;
}
ВекторНикитин Михаил Евгеньевич, 2015ГБПОУ ПК имени П.А. Овчинникова  #include  #include  int main()  {

Слайд 13Вектор
Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А. Овчинникова
назначение элементов
assign(InputIterator first, InputIterator

last) - удалить все элементы и вставить элементы из диапазона [first, last);
assign(size_type, const T& t) - удалить все элементы и вставить n элементов со значением t;
swap(vector& x) - обменять значения элементов векторов
ВекторНикитин Михаил Евгеньевич, 2015ГБПОУ ПК имени П.А. Овчинникованазначение элементовassign(InputIterator first, InputIterator last) - удалить все элементы и вставить

Слайд 14Вектор
Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А. Овчинникова
#include

#include
int main(){
std::vector first, second, third;
first.assign(7,0);
for (int i = 0; i < first.size(); i++)
first[i] = i;
std::vector::iterator it;
it = first.begin() + 1;
second.assign(it, first.end() - 1);
int myints[] = { 1776,7,4 };
third.assign(myints, myints + 3); // assigning from array.
std::cout << "first vector: ";
std::cout << "Size of first: " << int(first.size()) << std::endl;
for (int i = 0; i < first.size(); i++)
std::cout << first[i] << " ";
std::cout << std::endl;
// вывод остальных массивов
return 0;
}
ВекторНикитин Михаил Евгеньевич, 2015ГБПОУ ПК имени П.А. Овчинникова  #include  #include  int main(){

Слайд 15Вектор
Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А. Овчинникова
#include

#include
int main(){
std::vector foo(3, 100); // three ints with a value of 100
std::vector bar(5, 200); // five ints with a value of 200
foo.swap(bar);
std::cout << "foo contains:";
for (unsigned i = 0; i std::cout << ' ' << foo[i];
std::cout << std::endl;
std::cout << "bar contains:";
for (unsigned i = 0; i std::cout << ' ' << bar[i];
std::cout << std::endl;
return 0;
}
ВекторНикитин Михаил Евгеньевич, 2015ГБПОУ ПК имени П.А. Овчинникова  #include  #include  int main(){

Слайд 16Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А. Овчинникова
доступ к элементам
at(size_type n) -

доступ к элементу с индексом n, при некорректном значении n возбуждается исключение;
back() - доступ к последнему элементу;
front() - доступ к первому элементу.
Если исключение не нужно, то для доступа к элементам можно воспользоваться перегруженной операцией [].

Никитин Михаил Евгеньевич, 2015ГБПОУ ПК имени П.А. Овчинниковадоступ к элементамat(size_type n) - доступ к элементу с индексом n, при некорректном значении

Слайд 17Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А. Овчинникова
#include

#include
int main(){
std::vector myvector(10);
for (unsigned i = 0; i myvector.at(i) = i;
std::cout << "myvector contains:";
for (unsigned i = 0; i std::cout << ' ' << myvector.at(i);
std::cout << std::endl;
return 0;
}
Никитин Михаил Евгеньевич, 2015ГБПОУ ПК имени П.А. Овчинникова  #include  #include  int main(){

Слайд 18Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А. Овчинникова

поддержка стека

pop_back() - удалить

последний элемент;
push_back(const T& x) - добавить в конец элемент.
Никитин Михаил Евгеньевич, 2015ГБПОУ ПК имени П.А. Овчинниковаподдержка стекаpop_back() - удалить последний элемент; 	push_back(const T& x) -

Слайд 19Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А. Овчинникова
#include

#include
int main(){
std::vector myvector;
int sum(0);
myvector.push_back(100);
myvector.push_back(200);
myvector.push_back(300);
while (!myvector.empty())
{
sum += myvector.back();
myvector.pop_back();
}
std::cout << "The elements of myvector add up to " << sum << '\n';
return 0;
}


Никитин Михаил Евгеньевич, 2015ГБПОУ ПК имени П.А. Овчинникова  #include  #include  int main(){

Слайд 20Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А. Овчинникова
удаление элементов
clear() - удалить

все элементы из вектора;
erase(iterator position) - удаляет указанный элемент и возвращает итератор на следующий элемент или end();

erase(iterator first, iterator last) - удаляет элементы из диапазона [first, last).
Никитин Михаил Евгеньевич, 2015ГБПОУ ПК имени П.А. Овчинниковаудаление элементовclear() - удалить все элементы из вектора; erase(iterator position) -

Слайд 21Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А. Овчинникова
#include

#include
int main() {
std::vector myvector;
myvector.push_back(100);
myvector.push_back(200);
myvector.push_back(300);
std::cout << "myvector contains:";
for (unsigned i = 0; i std::cout << ' ' << myvector[i];
std::cout << std::endl;
myvector.clear();
std::cout << "myvector size " << myvector.size() << std::endl;
myvector.push_back(1101);
myvector.push_back(2202);
std::cout << "myvector contains:";
for (unsigned i = 0; i std::cout << ' ' << myvector[i];
std::cout << std::endl;
return 0;
}
Никитин Михаил Евгеньевич, 2015ГБПОУ ПК имени П.А. Овчинникова  #include  #include  int main() {

Слайд 22Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А. Овчинникова
#include

#include
int main(){
std::vector myvector;
for (int i = 1; i <= 10; i++) myvector.push_back(i);
// erase the 6th element
myvector.erase(myvector.begin() + 5);
// erase the first 3 elements:
myvector.erase(myvector.begin(), myvector.begin() + 3);
std::cout << "myvector contains:";
for (unsigned i = 0; i std::cout << ' ' << myvector[i];
std::cout << std::endl;
return 0;
}
Никитин Михаил Евгеньевич, 2015ГБПОУ ПК имени П.А. Овчинникова  #include  #include  int main(){

Слайд 23Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А. Овчинникова
вставка элементов
insert(iterator position, size_type

n, const T& x) - вставляет n элементов со значением x в указанную позицию;
insert(iterator position, const T& x) - вставляет элемент со значением x в указанную позицию;
insert(iterator position, InputIterator first, InputIterator last) - вставляет в указанную позицию копии элементов диапазона [first, last).
Никитин Михаил Евгеньевич, 2015ГБПОУ ПК имени П.А. Овчинниковавставка элементовinsert(iterator position, size_type n, const T& x) - вставляет

Слайд 24Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А. Овчинникова
#include

#include
void print_vector(std::vector& vec1){
for (int i = 0; i < vec1.size();i++)
std::cout << " " << vec1[i];
std::cout << std::endl;
}
int main(){
std::vector myvector(3, 100);
std::vector::iterator it;
it = myvector.begin();
it = myvector.insert(it, 200);
std::cout << "myvector first ";
print_vector(myvector);
myvector.insert(it, 2, 300);
std::cout << "myvector second";
print_vector(myvector);
it = myvector.begin();

Никитин Михаил Евгеньевич, 2015ГБПОУ ПК имени П.А. Овчинникова  #include  #include  void print_vector(std::vector& vec1){

Слайд 25Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А. Овчинникова
std::vector

anothervector(3, 400);
myvector.insert(it + 2, anothervector.begin(), anothervector.end());
std::cout << "myvector third";
print_vector(myvector);

int myarray[] = { 501,502,503 };
myvector.insert(myvector.begin(), myarray, myarray + 3);

std::cout << "myvector contains:";
print_vector(myvector);

return 0;
}
Никитин Михаил Евгеньевич, 2015ГБПОУ ПК имени П.А. Овчинникова   std::vector anothervector(3, 400);   myvector.insert(it +

Слайд 26Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А. Овчинникова
перегруженные операции
[] - операция

индексации, не генерирует исключение при выходе за границы массива;
= - назначить одному вектору копии элементов второго (v1 = v2);
== - определить равны ли два вектора (v1 == v2);!= - определить не равны ли два вектора (v1 != v2);
Никитин Михаил Евгеньевич, 2015ГБПОУ ПК имени П.А. Овчинниковаперегруженные операции[] - операция индексации, не генерирует исключение при выходе за границы массива;=

Слайд 27Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А. Овчинникова
перегруженные операции
< - меньше

ли один вектор чем другой (v1 < v2);
> - больше ли один вектор чем другой (v1 > v2);
<= - меньше или равен один вектор по отношению к другому (v1 <= v2);
>= - больше или равен один вектор по отношению к другому (v1 >= v2).

Никитин Михаил Евгеньевич, 2015ГБПОУ ПК имени П.А. Овчинниковаперегруженные операции< - меньше ли один вектор чем другой (v1

Слайд 28Двусвязные списки в C++ 
Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А. Овчинникова
Чтобы

воспользоваться контейнером списков в С++, вам необходимо подключить следующий заголовочный файл:
#include
Конструкторы
list(const allocator_type& alloc = allocator_type()); // default
list(size_type n, const value_type& val = value_type(), const allocator_type& alloc = allocator_type()); //fill
template list(InputIterator first, InputIterator last, const allocator_type& alloc = allocator_type()); //range
list(const list& x); //copy
Двусвязные списки в C++ Никитин Михаил Евгеньевич, 2015ГБПОУ ПК имени П.А. ОвчинниковаЧтобы воспользоваться контейнером списков в С++, вам

Слайд 29списки
Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А. Овчинникова
Итераторы
begin() - итератор на первый

элемент;
end() - итератор на элемент идущий после последнего;
rbegin() - итератор на последний элемент (для обратных алгоритмов);
rend() - итератор на позицию перед первым элементом (для обратных алгоритмов).

спискиНикитин Михаил Евгеньевич, 2015ГБПОУ ПК имени П.А. ОвчинниковаИтераторыbegin() - итератор на первый элемент;end() - итератор на элемент идущий после

Слайд 30списки
Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А. Овчинникова
#include

#include
int main(){
std::list first;
std::list second(4, 100);
std::list third(second.begin(), second.end());
std::list fourth(third);
int myints[] = { 16,2,77,29 };
std::list fifth(myints, myints + sizeof(myints) / sizeof(int));
std::cout << "The contents of fifth are: ";
for (std::list::iterator it = fifth.begin(); it != fifth.end(); it++)
std::cout << *it << ' ';
std::cout << std::endl;
return 0;
}
спискиНикитин Михаил Евгеньевич, 2015ГБПОУ ПК имени П.А. Овчинникова  #include  #include  int main(){

Слайд 31Вектор
Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А. Овчинникова
Размерность
empty Проверяет, пуст ли список.
size Возвращает

количество элементов в списке.
max_size Возвращает максимальную длину списка.
ВекторНикитин Михаил Евгеньевич, 2015ГБПОУ ПК имени П.А. ОвчинниковаРазмерностьempty	Проверяет, пуст ли список.size	Возвращает количество элементов в списке.max_size	Возвращает максимальную длину

Слайд 32Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А. Овчинникова
Доступ к элементам:
front - возвращает

ссылку на первый элемент в списке.
back - возвращает ссылку на последний элемент в списке.
Изменение списка:
push_back - добавляет элемент в конец списка.
push_front - добавляет элемент в начало списка
pop_back - удаляет элемент в конце списка.
pop_front - удаляет элемент в начале списка.
Никитин Михаил Евгеньевич, 2015ГБПОУ ПК имени П.А. ОвчинниковаДоступ к элементам:front	- возвращает ссылку на первый элемент в списке.back	-

Слайд 33Никитин Михаил Евгеньевич, 2015
ГБПОУ ПК имени П.А. Овчинникова
#include

#include

int main(){
std::list mylist;
mylist.push_back(77);
mylist.push_back(22);
mylist.front() -= mylist.back();
std::cout << "mylist.front() is now " << mylist.front() << '\n';
return 0;
}
Никитин Михаил Евгеньевич, 2015ГБПОУ ПК имени П.А. Овчинникова  #include  #include  int main(){

Что такое shareslide.ru?

Это сайт презентаций, где можно хранить и обмениваться своими презентациями, докладами, проектами, шаблонами в формате PowerPoint с другими пользователями. Мы помогаем школьникам, студентам, учителям, преподавателям хранить и обмениваться учебными материалами.


Для правообладателей

Яндекс.Метрика

Обратная связь

Email: Нажмите что бы посмотреть