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

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

  • Функциональным объектом

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


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

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


    // программа считывает числа в вектор, сортирует по возрастанию и
    // выводит на экран:
    void main()
    {
    int n;
    cout << "n?";
    cin >> n;
    vector v;
    int x;
    //заполнение вектора
    for(int i=0; i {
    cout << "?"; cin >> x;
    v.push_back(x); //добавление в конец
    }
    sort(v.begin(), v.end()); //сортировка
    vector::const_iterator i;
    for (i = v.begin(); i != v.end(); ++i)
    cout << *I << " "; //печать вектора
    }

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


    Алгоритм sort имеет две сигнатуры:
      template
      void sort(RandomAccessIt first, RandomAccessIt last);
      - обеспечивает сортировку элементов из диапазона [first, last), причем для упорядочения по умолчанию используется операция <, которая должна быть определена для типа Т. Таким образом, сортировка по умолчанию – это сортировка по возрастанию значений.
      template
      void sort(RandomAccessIt first, RandomAccessIt last, Compare comp); – позволяет задать произвольный критерий упорядочения. Для этого нужно передать через третий аргумент соответствующий предикат, то есть функцию или функциональный объект, возвращающие значение типа bool.

      Функциональным объектом называется объект некоторого класса, для которого определена единственная операция вызова функции operator().
      В стандартной библиотеке определены шаблоны функциональных объектов для операций сравнения, встроенных в язык C++ .они возвращают значение типа bool.

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


    Шаблоны функциональных объектов для операций сравнения
    При подстановке в качестве аргумента алгоритма требуется инстанцирование этих шаблонов, например: equal_to().
    Если заменить в предыдущей программе вызов функции sort на sort(v.begin(), v.end(), greater()), то вектор будет отсортирован по убыванию значений его элементов.
    Если сортировка выполняется для контейнера с объектами пользовательского класса, то программисту нужно самому позаботиться о наличии в классе предиката, задающего сортировку по умолчанию, а также (при необходимости) определить функциональные классы, объекты которых позволяют изменять настройку алгоритма sort.


    шаблон


    операция


    equal_to


    ==


    not_equal_to


    !=


    greater


    >


    less


    <


    greater_equal


    >=


    less_equal


    <=

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


    class person
    {
    char name[20];
    int age;
    public:
    //конструктор без параметров
    person(){name[0]='\0';age=0;}
    person( char[20],int ); //конструктор с параметрами
    //функция для ввода объекта из потока
    friend istream& operator>>(istream&,person&);
    //функця для вывода объекта в поток
    friend ostream& operator<<(ostream&,const person&);
    char* get_name(){return name;} //получить имя
    int get_age(){return age;} //получить возраст
    //перегрузка операции сравнения с константой типа int
    bool operator == (const int &x)
    {if (age==x) return true;return false;}

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


    //перегрузка операции <
    bool operator < (const person & x)
    {if (age < x.age) return true; else return false;}
    //перегрузка операции <
    bool operator < (const int & x)
    {if (age < x) return true; else return false;}
    //перегрузка операции >
    bool operator < (const person & x)
    {if (age < x.age) return true; else return false;}
    //перегрузка операции >
    bool operator > (const int & x)
    {if (age > x) return true; else return false;};
    };

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


    //функциональный класс для сортировки по возрастанию
    class Comp1
    {
    public:
    bool operator()(person&p1,person&p2)
    {
    if(strcmp(p1.get_name(),p2.get_name())<0)return 1;
    else return 0;
    }
    };
    //функциональный класс для сортировки по убыванию
    class Comp2
    {
    public:
    bool operator()(person&p1,person&p2)
    {
    if(strcmp(p1.get_name(),p2.get_name())>0)return 1;
    else return 0;
    }

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


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