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

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

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


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

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


    Метод erase имеет следующие реализации:
      iterator erase(iterator pos); – удаляет элемент, на который указывает итератор pos.
      iterator erase(iterator first, iterator last); – удаляет диапазон элементов first…last.

      void main()
      {
      vector v1; //создание пустого вектора
      int n, a;
      cout << "\nn?";
      cin >> n;
      for(int i=0; i {
      cout << "?";
      cin >> a;
      v1.push_back(a); //добавление в конец
      }
      for(i=0; i cout << "\n";

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


    //удаление первого элемента:
    vector::iterator iv = v1.erase(v1.begin());
    cout << (*iv) << "\n";
    for(i=0; i cout << v1[i] << " ";
    //удаление элементов со 2 по 5:
    vector::iterator v =
    v1.erase(v1.begin()+1, v1.begin()+5);
    //удаление последнего элемента:
    vector::iterator iv = v1.erase(v1.end()-1);
    v1.pop_back();
    }

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


    Метод swap(v) служит для обмена элементов одного типа, но не обязательно одного размера: v1.swap(v2). К векторам также применимы операции сравнения(==,!=,<,<=):
    // пример работы с векторами, демонстрирующий использование
    // методов swap(), empty (), back(), pop_back()
    void main()
    {
    double arr[] = {1.1, 2.2, 3.3, 4.4};
    //количество элементов в массиве:
    int n = sizeof(arr)/sizeof(double);
    //инициализация вектора массивом:
    vector v1(arr, arr + n);
    vector v2; //пустой вектор
    v1.swap(v2); //обменять содержимое v1 и v2
    while (!v2.empty())
    {
    cout << v2.back() <<" "; //вывести последний элемент
    v2.pop_back(); //и удалить его
    }
    }

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


    Рассмотрим теперь основные операции для очередей и списков.
    //Пример работы с очередью
    typedef deque tdeque;
    void main()
    {
    //создать объект-контейнер типа deque
    tdeque q;
    cout << "\nThe first queue\nn?";
    int n; //количество объектов в queue
    long a;
    cin >> n;
    for(int i=0; i {
    cout << "?";
    cin >> a;
    q.push(a); //добавление в очередь
    }
    print("The first queue:\n", q);
    cout << "\nTwo first elements are deleting...\n";

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


    //итератор поставили на начало очереди temp:
    tdeque::iterator p = q.begin();
    q.erase(p, p+2); //удалили два элемента из начала
    p = q.begin();
    q.insert(p,100); //добавили элемент в начало
    print("The first queue:\n", q);
    }

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


    Пример работы со списком :
    void main()
    {
    list l; //создание пустого списка
    list::iterator i; //итератор для работы со списком
    int x=1;
    while(x!=0) //заполнение списка
    {
    cout<<"?";
    cin>>x;
    l.push_back(x); //добавление в конец списка
    }
    //для печати используем функцию print(), определенную выше:
    print("list:",l);
    i = l.begin(); //итератор поставили на начало списка
    //добавление элемента со значением 100:
    l.insert(++i, 100);
    print("list:", l); //печать
    l.pop_back(); //удаление из конца
    l.pop_front(); //удаление из начала
    print("list:", l); //печать
    }

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


    Адаптеры контейнеров
    Специализированные последовательные контейнеры:
      стек;
      очередь;
      очередь с приоритетами.

      не являются самостоятельными контейнерными классами, а реализованы на основе рассмотренных выше классов, поэтому они называются адаптерами контейнеров.
      По умолчанию для стека (заголовочный файл ) прототипом является класс deque.
      Объявление stack s создает стек на базе двусторонней очереди (по умолчанию). Если по каким-то причинам нас это не устраивает, и мы хотим создать стек на базе списка, то объявление будет выглядеть следующим образом:
      stack > s;
      Смысл такой реализации заключается в том, что специализированный класс просто переопределяет интерфейс класса-прототипа, ограничивая его только теми методами, которые нужны новому классу. Cтек не позволяет выполнить произвольный доступ к своим элементам, а также не дает возможности пошагового перемещения, т. е. итераторы в стеке не поддерживаются.
    1   ...   18   19   20   21   22   23   24   25   26


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