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

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

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


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

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


    //предикат для поиска по условию "возраст < заданного возраста"
    template сlass pred1
    {
    public:
    bool operator()(t& x)
    {
    if(x }
    };
    //предикат для поиска по условию "возраст == заданному возрасту"
    template class pred2
    {
    public:
    bool operator()(t& x)
    {
    if(x==year)return true; else return false;
    }
    };


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


    vector
    temp;
    sort(temp.begin(),temp.end(),Comp2()); //сортировка по убыванию
    //найти все людей, у которых возраст меньше 18
    //итератор tv1 поставили на начало вектора
    vector
    ::iterator tv1=temp.begin();
    //итератор tv2 поставили на конец вектора
    vector
    ::iterator tv2=temp.end();
    //поиск значения, соответствующего предикату pp1
    pred1
    pp1;
    cout<<"Persons which have age<18:\n";
    if((tv1=find_if(temp.begin(),tv2,pp1))!=temp.end())
    {
    cout<<*tv1;
    }
    else
    {
    cout<<"\nThere is no such object\n";
    }
    cout<<"\n";

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


    //отсортировать контейнер по возрстанию
    sort(temp.begin(),temp.end(),Comp1());
    //найти количество человек, у которых возраст равен 18
    //поиск значения, соответствующего предикату pp2
    pred2
    pp2;
    //итератор поставили на начало вектора
    tv1=temp.begin();
    //итератор поставили на конец вектора
    tv2=temp.end();
    cout<<"Persons which have age=18:\n";
    int count=count_if(tv1,tv2,pp2);
    cout<<"Count="< cout<<"\n";

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


    Ассоциативные контейнеры
    В ассоциативных контейнерах элементы не выстроены в линейную последовательность. Они организованы в более сложные структуры (деревья), что дает большой выигрыш в скорости поиска. Поиск значений производится с помощью ключей как числового или строкового типа, так и представленных в виде объектов или указателей на них. Рассмотрим две основные категории ассоциативных контейнеров в STL: множества и словари.
    В множестве (set) хранятся объекты, упорядоченные по некоторому ключу, являющемуся атрибутом самого объекта. Например, множество может хранить объекты класса Person, упорядоченные в алфавитном порядке по значению ключевого поля name. Если в множестве хранятся значения одного из встроенных типов, например int, то ключом является сам элемент.
    Шаблон множества имеет два параметра: тип ключа и тип функционального объекта, определяющего отношение "меньше". Если объявить некоторое множество set si; с опущенным вторым параметром шаблона, то по умолчанию для упорядочения членов множества будет использован предикат less. Точно так же можно опустить второй параметр при объявлении множества set s2, если в классе MyClass определена операция operator<().
    Для использования контейнеров типа set необходимо подключить заголовочный файл .

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


    Имеется три способа определить объект типа set:
      set set1; – создается пустое множество
      int а[5] = {1, 2, 3, 4, 5};
      set set2(a, а+5); – инициализация копированием массива
      set set3(set2); – инициализация другим множеством

      Для вставки элементов в множество можно использовать метод insert(), для удаления – метод erase(). Также к множествам применимы общие для всех контейнеров методы. Во всех ассоциативных контейнерах есть метод count(), возвращающий количество объектов с заданным ключом. Так как и в множествах, и в словарях все ключи уникальны, то метод count() возвращает либо 0, если элемент не обнаружен, либо 1. Для множеств библиотека содержит некоторые специальные алгоритмы, в частности, реализующие традиционные теоретико-множественные операции:

      includes выполняет проверку включения одной последовательности в другую, результат равен true в том случае, когда каждый элемент последовательности [first2,last2) содержится в последовательности [firstl, lastl).
      set_intersection создает отсортированное пересечение множеств, то есть множество, содержащее только те элементы, которые одновременно входят и в первое, и во второе множество.
      set_union создает отсортированное объединение множеств, то есть множество, содержащее элементы первого и второго множества без повторяющихся элементов

    1   ...   18   19   20   21   22   23   24   25   26


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