Главная страница
Навигация по странице:

  • Контейнерные классы

  • Ассоциативные контейнеры

  • Курс ООП в С презентация. ООП в с++(полный курс). Объекты и классы


    Скачать 1.76 Mb.
    НазваниеОбъекты и классы
    АнкорКурс ООП в С презентация
    Дата21.02.2022
    Размер1.76 Mb.
    Формат файлаppt
    Имя файлаООП в с++(полный курс).ppt
    ТипДокументы
    #368655
    страница19 из 26
    1   ...   15   16   17   18   19   20   21   22   ...   26

    Контейнерные классы


    Контейнеры — это объекты, содержащие другие однотипные объекты. Контейнерные классы являются шаблонными, поэтому хранимые в них объекты могут быть как встроенных, так и пользовательских типов. Эти объекты должны допускать копирование и присваивание. Встроенные типы этим требованиям удовлетворяют; то же самое относится к классам, если конструктор копирования или операция присваивания не объявлены в них закрытыми или защищенными. Контейнеры STL реализуют основные структуры данных, используемые при написании программ.
    При описании диаграмм классов на UML, объявления атрибутов-контейнеров могут использоваться в качестве спецификаторов ролей экземпляров классов в отношениях ассоциации или агрегации:
    Так, приведенный выше пример описывает, что накладная (экземпляр класса invoice) включает множество строк – экземпляров класса line посредством описанного в классе invoice атрибута Lines типа list, что в коде будет выглядеть следующим образом:
    class invoice
    {
    public:
    list Lines;
    };

    Контейнерные классы


    Обобщенные алгоритмы реализуют большое количество процедур, применимых к контейнерам: поиск, сортировку, слияние и т. п. Однако они не являются методами контейнерных классов. Алгоритмы представлены в STL в форме глобальных шаблонных функций. Благодаря этому достигается универсальность: эти функции можно применять не только к объектам различных контейнерных классов, но также и к массивам. Независимость от типов контейнеров достигается за счет косвенной связи функции с контейнером: в функцию передается не сам контейнер, а пара указателей (first и last), задающая диапазон обрабатываемых элементов.
    Реализация указанного механизма взаимодействия базируется на использовании итераторов. Итераторы представляют собой обобщение концепции указателей и служат, как мы рассмотрели ранее, для обращения к элементам контейнера и последовательного продвижения по нему.

    Контейнерные классы


    Строки
    Строка является классом, который хранит символы и предоставляет операции, такие как доступ по индексу, конкатенацию и сравнение, которые мы обычно связываем с понятием "строка". Стандартная библиотека для реализации строк предоставляет шаблон класса basic_string, с помощью которого определён тип string, представляющий собой синоним для basic_string:
    typedef basic_string string;
    Тип basic_string похож на vector, который мы рассмотрим далее, за исключением того, что basic_string вместо набора операций со списками, которые предлагает vector, обеспечивает некоторые типовые операции со строками, такие как поиск подстрок.
    В качестве типа своих элементов строка может использовать любой тип, причём эффективность кода может улучшиться при отсутствии операции копирования, определяемой пользователем, в типе символов.
    basic_string int_str1, int_str2;
    int_str1 = 9876;
    basic_string::iterator si = int_str1.begin();
    int_str1+=5432;
    int_str1+=1098;
    int_str2=7654;
    int_str1.append(int_str2);
    while (si != int_str1.end())
    cout << *si << endl; si++;

    Контейнерные классы


    Контейнеры
    Последовательные контейнеры обеспечивают хранение конечного количества однотипных объектов в виде непрерывной последовательности. К базовым последовательным контейнерам относятся
      векторы (vector);
      списки (list);
      двусторонние очереди (deque).

      Кроме них, существуют специализированные контейнеры (или адаптеры контейнеров), реализованные на основе базовых :

      стеки (stack);
      очереди (queue) ;
      очереди с приоритетами (priority_queue).

      Ассоциативные контейнеры обеспечивают быстрый доступ к данным по ключу. Эти контейнеры построены на основе сбалансированных деревьев. Существует пять типов ассоциативных контейнеров:

      словари (mар);
      словари с дубликатами (multimap);
      множества (set);
      множества с дубликатами (multiset);
      битовые множества (bitset).

    Контейнерные классы


    #include
    #include
    #include
    #include "item.h"
    #include "person.h"
    void main()
    {
    std::vector V; //вектор с элементами типа int
    std::list
    L; //список с элементами типа person
    //словарь для доступа к целым числам по адресу объекта типа item:
    std::map > M;
    }

    1   ...   15   16   17   18   19   20   21   22   ...   26


    написать администратору сайта