Объектно-Ориентированное Программирование на C++, Лекции 3 и 4 Dima Dzuba
Описываются возможности C++ по работе с наследованием (virtual, override, final). Описываются механизмы работы с константными переменными и методами (const, mutable, constexpr). Описываются возможности по перегрузке операторов (operator).
Субъекторная модель, Григорий Демченко
Правда ли, что в С++ присутствует ООП? Сколько существует различных способов асинхронной синхронизации на сопрограммах в пользовательском пространстве? И, наконец, что такое "субъекторная модель" и чем она отличается от акторной модели? Обо всем этом и пойдет речь в данном докладе.
Olexandra Dmytrenko
QA Automating at EPAM Systems
I'll show you how to switch from writing standard code using good old Java7 into writing it using functional way presented in Java8. The training is counted on beginners in the subject who like discovering the new horizons or for those who want to become more firm in using the new lambda features.
В лекции подробно рассмотрены тонкие моменты языка JavaScript, с которыми часто возникают основные проблемы. Наглядные примеры и рецепты помогают лучше понять его особенности.
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4 Dima Dzuba
Описываются возможности C++ по работе с наследованием (virtual, override, final). Описываются механизмы работы с константными переменными и методами (const, mutable, constexpr). Описываются возможности по перегрузке операторов (operator).
Субъекторная модель, Григорий Демченко
Правда ли, что в С++ присутствует ООП? Сколько существует различных способов асинхронной синхронизации на сопрограммах в пользовательском пространстве? И, наконец, что такое "субъекторная модель" и чем она отличается от акторной модели? Обо всем этом и пойдет речь в данном докладе.
Olexandra Dmytrenko
QA Automating at EPAM Systems
I'll show you how to switch from writing standard code using good old Java7 into writing it using functional way presented in Java8. The training is counted on beginners in the subject who like discovering the new horizons or for those who want to become more firm in using the new lambda features.
В лекции подробно рассмотрены тонкие моменты языка JavaScript, с которыми часто возникают основные проблемы. Наглядные примеры и рецепты помогают лучше понять его особенности.
Primul pas de gestionare server este optinerea informatiei necesare din sistem de operare. In aceasta prezentare se vorbeste despre instrumente de acces la informatie in SO WIndows, Linux.
3. Обозначения
обозначения
Х - некторый класс (контейнер);
u, a, b - объекты класса X;
r - итератор;
T - значимый тип (элементов контейнера);
t - значение типа T;
n - целочисленное значение.
4. Итераторы
Итератор - объект, предоставляющий доступ к
элементам контейнера и позволяющий их
перебирать.
ВИДЫ ИТЕРАТОРОВ
Итератор вывода
Итератор ввода
Последовательный итератор
Двунаправленный итератор
Итератор произв. доступа
5. Итераторы
Итератор ввода (input iterator) – позволяет
получать значения элементов контейнера;
Итератор вывода (output iterator) – позволяет
изменять значения элементов контейнера;
Последовательный итератор (forward iterator) –
гарантируют последовательный перебор
элементов;
Двунаправленный итератор (bidirectional iterator)
– позволяют перебирать элементы контейнера как
в прямом, так и в обратном порядке;
Итератор произвольного доступа (random access
iterator) – ;
6. Свойства итераторов:
итераторы ввода
Свойство
Пояснение
X(a)
X u(a);
X u = a;
Конструктор копирования. Предполагается наличие
деструктора
a = b;
Оператор копирования.
a==b;
a != b;
Операторы сравнения
*a;
Оператор разыменования. Возвращается ссылка на объект
из контейнера.
++r;
r++;
Последовательный перебор итераторов
NB: Итераторы ввода не гарантируют,
что если a == b, то a++ == b++
7. Свойства итераторов:
итераторы вывода
Свойство
Пояснение
X(a)
X u(a);
X u = a;
Конструктор копирования. Предполагается наличие
деструктора
*a = t;
Оператор разыменования. Возвращается ссылка на объект
из контейнера.
++r;
r++;
Последовательный перебор итераторов
10. Свойства итераторов:
итераторы произвольного доступа
Свойство
Пояснение
Обладает всеми свойствами двунаправленных итераторов
r += n;
r –= n;
Сдвиг на n элементов от итератора r
r + n;
n + r;
r – n;
Сдвиг на n элементов от итератора а
b – a;
Расстояние между итераторами
a[n]
Последовательный перебор итераторов
a > b;
a < b;
a ≥ b;
a ≤ b;
Операторы упорядочения.
11. Контейнеры
под контейнером понимают объект, содержащий другие
(обычно однотипные) объекты.
Доступ к элементом контейнера осуществляется через
итераторы.
Контейнеры С++ представляют собой шаблонные классы
с общим базовым интерфейсом.
13. Контейнеры: структура
выражение
значение
X::value_type
Равен типу T
X::reference
Равен типу T&
X::iterator
тип итератора, указывает на X::reference
X::const_iterator
Константный итератор
X()
Конструктор по умолчанию
X(a)
Конструктор копирования
a.begin()
Возвращает Iterator; const_iterator для постоянного a
a.end()
Возвращает Iterator; const_iterator для постоянного a
a.size()
Возвращает размер контейнера
a.empty()
Проверяет, если контейнер пустой
…
…
14. Последовательные контейнеры:
общие свойства
выражение
значение
X(n, t)
X a(n, t);
X(i, j)
X a(i, j);
a.insert(p, t)
a.insert(p, n, t)
после: size() == n.
создаёт последовательность с n копиями t.
после: size() == расстоянию между i и j.
создаёт последовательность, равную диапазону *i, j).
вставляет копию t перед p.
возвращаемое значение указывает на вставленную копию.
вставляет n копий t перед p.
a.insert(p, i, j)
вставляет копии элементов из диапазона *i, j) перед p.
a.erase(q)
удаляет элемент, указываемый q.
a.erase(ql, q2)
удаляет элементы в диапазоне *ql, q2).
16. Ассоциативные контейнеры:
общие свойства
свойство
пояснение
X::key_type
Тип ключа
X::value_type
Тип значения
X::key_compare
Тип функции сравнения ключей (функтор)
X(i, j), X(i, j, c)
Создание контейнера и заполнение его значениями из [i,
j). c – объект сравнения
a.insert(t)
a.insert(i, j)
a.insert(p, t)
Вставка элемента (полуотрезка)
a.erase(k);
a.erase(q);
Удаление элемента по ключу или итератору.
a.find(k)
Поиск значения по ключу
a.count(k)
Подсчет элементов с ключом, равным к
…
…
18. Рекомендации:
выбор контейнера
Критерий
Рекомендация
Возможность вставки нового
элемента на произвольную позицию
контейнера
Если нужна, выбирайте
последовательный контейнер;
ассоциативные контейнеры не подходят.
Структура памяти контейнера
должна соответствовать правилам
языка C
Только vector
критична скорость поиска
Рассмотрите сортированные векторы и
ассоциативные контейнеры
Критична скорость доступа
Список не подходит
...
...
19. Рекомендации:
использование STL
Не пытайтесь писать контейнерно-независимый
код;
Реализуйте быстрое и корректное копирование
объектов в контейнерах;
Старайтесь не использовать итераторы
повторно;
Используйте алгоритмы вместо циклов
Всегда включайте нужные заголовки
Научитесь читать сообщения компилятора