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

  • Выходные итераторы

  • Двунаправленные итераторы

  • Итераторы произвольного доступа

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

  • Унифицированные типы, определенные в STL Тип Пояснение

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


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

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


    Итераторы
    В STL существуют следующие типы итераторов:
      Входные итераторы (InputIterator) используются алгоритмами STL для чтения значений из контейнера, аналогично тому, как программа может вводить данные из потока сin.
      Выходные итераторы (OutputIterator) используются алгоритмами для записи значений в контейнер, аналогично тому, как программа может выводить данные в поток cout.
      Прямые итераторы (ForwardIterator) используются алгоритмами для навигации по контейнеру только в прямом направлении, причем, они позволяют и читать, и изменять данные в контейнере.
      Двунаправленные итераторы (BidirectionalIterator) имеют все свойства прямых итераторов, но позволяют осуществлять навигацию по контейнеру и в прямом, и в обратном направлениях (для них дополнительно реализованы операции префиксного и постфиксного декремента).
      Итераторы произвольного доступа (RandomAccessIterator) имеют все свойства двунаправленных итераторов плюс операции (наподобие сложения указателей) для доступа к произвольному элементу контейнера.

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


    Для двунаправленных итераторов и итераторов произвольного доступа определены разновидности, называемые адаптерами итераторов. Обратный итератор (reverse_iterator) – это адаптер, просматривающий последовательность в обратном направлении. Итераторы вставки предназначены для добавления элементов в
      начало (front_iterator);
      конец (back_iterator) ;
      произвольное место (insert_iterator) контейнера.

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


    Общие свойства контейнеров
    Для удобства использования в большинстве контейнерных классов с помощью typedef определены синонимы типов, которые можно использовать при написании шаблонов функций, ничего не зная о настоящих типах контейнера:
    Унифицированные типы, определенные в STL


    Тип


    Пояснение


    value_type


    тип элемента контейнера


    size_type


    тип индексов, счетчиков элементов и т. д.


    iterator


    итератор


    const_iterator


    константный итератор (значения элементов изменять запрещено)


    reference


    ссылка на элемент константная


    const_reference


    ссылка на элемент (значение элемента изменять запрещено)


    key_type


    тип ключа для ассоциативных контейнеров


    key_compare


    тип критерия сравнения для ассоциативных контейнеров

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


    Возьмем для примера функцию вычисления суммы всех элементов контейнера:
    template typename C::value_type sum(const C& c)
    {
    typename C::value_type s = 0;
    typename C::const_iterator p = c.begin();
    while (p!=c.end())
    {
    s+=*p;
    ++p;
    }
    return s;
    }
    Теперь её можно использовать для работы с любым контейнером:
    vector v1;
    int m[5]={1,2,3,4,5};
    v1.insert(v1.begin(), m, m+5);
    cout << sum(v1) << endl;

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


    операция или метод


    пояснение


    операции равенства (==) и неравенства (!=)


    возвращают значение true или false


    операция присваивания (=)


    копирует один контейнер в другой


    clear()


    удаляет все элементы


    insert()


    добавляет один элемент или диапазон элементов


    erase()


    удаляет один элемент или диапазон элементов


    size_type size() const


    возвращает число элементов


    size_type max_size() const


    возвращает максимально допустимый размер контейнера


    bool empty() const


    возвращает true, если контейнер пуст


    iterator begin()


    возвращают итератор на начало контейнера
    (итерации будут выполняться в прямом направлении)


    iterator end()


    возвращают итератор на конец контейнера
    (итерации в прямом направлении будут закончены)


    reverse_iterator begin()


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


    reverse_iterator end()


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

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


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