Содержание
- 2. Контрольные вопросы Для каких целей применяются объекты, учитывающие ссылки? Можно ли сказать, что в .Net применяются
- 3. Рассмотрены Value и Reference типы, ссылки в .Net STL Потоки Строки Общие свойства контейнеров Последовательные контейнеры:
- 4. Value и Reference типы в .Net Типы-значения: struct, enum. В частности, int, double, bool и char.
- 5. Value и Reference типы в .Net Остальные типы ссылочные. MyClass x = new MyClass(); Объект не
- 6. Value и Reference типы в .Net MyStruct s1 = new MyStruct { Name = "123"}, s2
- 7. Ссылки и передача параметров в .Net void Swap(MyClass c1, MyClass c2) { MyClass c3 = c1;
- 8. Ссылки и передача параметров в .Net o1 Объект 1 типа MyClass o2 Объект 2 типа MyClass
- 9. Ссылки и передача параметров в .Net void Swap(ref MyClass c1, ref MyClass c2) { MyClass c3
- 10. Ссылки и передача параметров в .Net Ссылки и передача параметров в .Net o1 Объект 1 типа
- 11. Ссылочные типы и строки .Net Интересной особенностью обладает тип string. String в .Net – неизменяемый ссылочный
- 12. Упражнения Предложите проверку, которая покажет, является ли объект экземпляром ссылочного типа или экземпляром типа-значения. Как убедиться,
- 13. STL – стандартная библиотека (шаблонов) STL - Standard Template Library Набор абстрактных типов данных и алгоритмов.
- 14. Потоки (STL) Обобщенный способ организации ввода/вывода. Потоки ввода (istream), Потоки вывода (ostream), И потоки ввода-вывода (iostream).
- 15. Моды потоков Потоки открываются в бинарной и текстовой моде В текстовой моде можно управлять форматированием. Например,
- 16. Специальные потоки потоки cout, cin, cerr, clog связаны только со стандартным вводом выводом и применимы только
- 17. Файловые потоки. Пример #include #include using namespace std; int main(){ char fName[128]; cout cout ifstream ifs;
- 18. Строки. Стандартная библиотека предоставляет класс работы со строками – заголовок . Теперь вместо: char fName[128]; cout
- 19. Строки. Минимальный набор. Конструкторы: string(), string (const char *p) и string(const string &s). Операции: length(), [],
- 20. Контейнеры в STL Важная часть STL – шаблоны контейнеров. Контейнеры – класс для хранения объектов других
- 21. Общие свойства контейнеров Контейнеры STL можно параметризовать любыми типами, для которых определены операции =, == и
- 22. Итераторы Итераторы - типы, позволяющие двигаться по контейнеру ::iterator i = obj.begin(); ::iterator i = obj.end();
- 23. Итераторы и .Net Как правило, использование итераторов позволяет более эффективно пройти по всему контейнеру, чем другие
- 24. Последовательные контейнеры. Список. typedef list LSTSTR; //Создание LSTSTR lst1, lst2(5, “abc”); LSTSTR lst3(lst2), lst4(lst2.begin(), --lst2.end()); //Проверка
- 25. Список //Добавление элементов lst1.push_back(“2”); lst1.push_front(“1”); // {1,2} lst1.insert(--lst1.end(), “a”); // list is {1,a,2} cout //Изменить элемент
- 26. Последовательные контейнеры. Динамический массив. typedef vector VINT; //Создание VINT v1, v2(100); VINT v3(v2.begin(), --v2.end()); //Присваивание v3
- 27. Последовательные контейнеры. Динамический массив. В дополнение к списку vector (как и string) имеет 2 характеристики размера:
- 28. Последовательные контейнеры. Очереди и стеки. - Double ended queue, двусторонняя очередь (сокращенно Дек). Позволяет помещать и
- 29. Ассоциативные контейнеры. Множество. typedef set SETSTR; //Создание SETSTR s, s2; //Пустой cout //Добавление элементов s.insert (“abc”);
- 30. Ассоциативные контейнеры. Таблицы. typedef map STR2INT; //Создание STR2INT m; //Пустой cout //Добавить и изменить m.insert(STR2INT::value_type(“a”,1)); //
- 31. Таблицы STR2INT::iterator i = m.find(“ab”); //i == m.end() //Содержат пары! for (STR2INT::iterator i= m.begin(); i !=
- 32. Пары pair – удобная абстракция pair pr; //ключом является int, значение – string. pr.first = 1;
- 33. Прочие шаблоны Иногда полезно иметь контейнер для хранения нескольких элементов с одинаковым ключом. multiset и multimap.
- 34. Аналоги контейнеров в .Net List - динамический массив, аналог vector Dictionary - словарь, таблица, аналог map
- 35. Зачем столько контейнеров? Сложность изменения списка O(1), а чтения элемента с заданным номером O(N); Сложность изменения
- 36. Пример применения контейнеров Задача. Посчитать количество различных слов, которые поступают с консоли в программу. Предположим, что
- 37. Пример применения set Если нужно вывести все различные слова, то for (SETSTR:: iterator i = c.begin();
- 38. Примеры применения контейнеров. Задача. Найти N самых частых слов в тексте. Задачу можно решить в 2
- 39. Примеры применения контейнеров. typedef map STR2INT; STR2INT m; //Объявили контейнер string s cin>>s; //Читаем слово* while
- 40. Примеры применения контейнеров int N=16; set > mostFriquent; for (STR2INT:: iterator i = m.begin(); i !=
- 41. Контрольные вопросы Почему контейнеры называются абстрактными типами данных? Что такое последовательные и ассоциативные контейнеры? Приведите примеры
- 42. Умные указатели (smart pointers) Одна из распространенных ошибок в C++ связана с new ... Нет соответствующего
- 43. Умные указатели (smart pointers) shared_ptr pt(new CTest); pt – это объект типа shared_ptr , проинициализированный указателем
- 44. Умные указатели Основные операции shared_ptr pt(new CTest); Конструкторы копирования и инициализации, = - присваивание, ->, *
- 45. Умные указатели демонстрация shared_ptr pt(new CTest); cout cout cout val shared_ptr ps; cout cout cout val
- 46. Умные указатели Без new Для shared_ptr реализована и “фабрика класса”, функция, которая позволяет создавать объекты этого
- 47. Умные указатели Заключительные замечания Умные указатели реализуют подсчет ссылок на объект владения. Появились в такой форме
- 49. Скачать презентацию