Перейти к основному содержанию
EDU-MMCS
Вы используете гостевой доступ (Вход)

Метапрограммирование в C++

  1. В начало
  2. Курсы
  3. Осенний семестр
  4. Вечернее отделение
  5. EV_IT_Meta
  6. Тема 1
  7. Задание 2 (индивидуальное): шаблоны функций

Задание 2 (индивидуальное): шаблоны функций

Требуемые условия завершения
Открыто с: пятница, 7 сентября 2018, 00:00
Срок сдачи: пятница, 28 декабря 2018, 21:00
  1. Реализовать шаблонную функцию, которая получает на вход любой стандартный контейнер из элементов любого типа и создаёт по нему список (std::list <>) из указателей на элементы этого контейнера, записанные в обратном порядке по отношению к элементам исходного контейнера. Тип указателей в выходном списке должен соответствовать типу элемента во входном контейнере и не должен позволять изменять элемент.

  2. Реализовать шаблонную функцию, которая получает на вход полуинтервал входных итераторов, ссылающихся на элементы любого типа, поддерживающего копирование конструированием и бинарную операцию +, и возвращает вектор (std::vector <>), состоящий из частичных сумм входной последовательности:

    ( x0, x0 + x1, ..., x0 + x1 + ... + xn ).

    Проверить работоспособность функции на данных типа NumberAdd из предыдущего задания.

  3. Реализовать шаблонную функцию, которая получает на вход список (std::list <>) из элементов любого типа, поддерживающего копирование конструированием, и строит по нему последовательность, шаблон которой передаётся функции в качестве «шаблонного шаблонного» параметра, состоящий из элементов с теми же значениями. Последовательность должна иметь метод push_back(). Проверить работоспособность функции на следующем типе:

    class Copyable
    {
    private:
      int m_n;
      Copyable &operator = (const Copyable &);
    public:
      explicit Copyable(int n) : m_n(n) { }
      friend std::ostream &operator << (
        std::ostream &rOS, const Copyable &rcCopyable)
      {
        rOS << rcCopyable.m_n;
        return rOS;
      }
    };
    

    Код вызова и проверки функции может выглядеть следующим образом:

      list <Copyable> l2 { Copyable(1), Copyable(2) };
      auto d1 = make <std::deque> (l2);
      for (const auto &rcT : d1)
        cout << ' ' << rcT;
      cout << endl;
    
  4. Реализовать шаблонную функцию, которая получает на вход любой контейнер из строк (std::string) и создаёт по нему множество (std::set <>) из итераторов исходного контейнера, ссылающихся на все его строки, имеющие максимальную длину.

  5. Реализовать шаблонную функцию, которая получает на вход любую обратимую последовательность из элементов любого типа, поддерживающую метод push_back(), и создаёт по ней последовательность такого же типа из указателей на элементы этой последовательности, записанные в обратном порядке по отношению к элементам исходной последовательности. Тип указателей в выходной последовательности должен соответствовать типу элемента во входной последовательности и не должен позволять изменять элемент. Проверить работоспособность функции на следующем коде:

      vector <int> l1 { 1, 2, 3, 4 };
      auto l2 = make(l1);
      for (auto &rcT : l2)
        cout << ' ' << *rcT;
      cout << endl;
    
  6. Реализовать шаблонную функцию, которая получает на вход полуинтервал входных итераторов, ссылающихся на элементы любого типа, поддерживающего операцию ==, и возвращающую вектор из указателей на эти элементы, заполненный указателями на каждый элемент исходного полуинтервала, отличающийся по значению от всех элементов до него. Проверить работоспособность функции на следующем типе:

    class Comparable
    {
    private:
      int m_n;
      Comparable &operator = (const Comparable &);
    public:
      explicit Comparable(int n) : m_n(n) { }
      bool operator == (const Comparable &rcOther)
      {
        return (m_n == rcOther.m_n);
      }
      friend std::ostream &operator << (
        std::ostream &rOS, const Copyable &rcCopyable)
      {
        rOS << rcCopyable.m_n;
        return rOS;
      }
    };
    
◄ Задание 1 (общее): шаблоны функций
Тест на базовые возможности шаблонов в C++ ►
Пропустить Навигация
Навигация
  • В начало

    • Страницы сайта

      • Мои курсы

      • Теги

    • Мои курсы

    • Курсы

      • Осенний семестр

        • Прикладная математика и информатика

        • Фундаментальная информатика и ИТ

        • Математика, механика

        • Педагогическое образование

        • Магистратура

          • Разработка мобильных приложений и компьютерных игр

        • Аспирантура

        • Вечернее отделение

          • Компьютерная графика-2021

          • Разработка компиляторов

          • Комп. графика ВО

          • БД (ВО)

          • EV_IT_Meta

            • Общее

            • Тема 1

              • ФайлПрезентация к лекции

              • ЗаданиеЗадание 1 (общее): шаблоны функций

              • ЗаданиеЗадание 2 (индивидуальное): шаблоны функций

              • ТестТест на базовые возможности шаблонов в C++

            • Тема 2

            • Тема 3

            • Тема 4

            • Тема 5

            • Тема 6

            • Тема 7

            • Экзамен

            • Тема 9

          • EV-IST

          • ВУИОД

        • Другое

      • Весенний семестр

        • Прикладная математика и информатика

        • Фундаментальная информатика и ИТ

        • Математика, механика

        • Педагогическое образование

        • Магистратура

          • Разработка мобильных приложений и компьютерных игр

        • Аспирантура

        • Вечернее отделение

        • Другое

      • Воскресная компьютерная школа

        • Пользователь компьютера плюс

        • Пользователь прикладных программ

        • Программирование I ступень

        • Программирование II ступень

        • Программирование III ступень

        • Архив

      • Воскресная математическая школа

        • Открытое тестирование РНОМЦ и мехмата ЮФУ - 2025

        • Олимпиадная математическая школа

        • Повышение квалификации

        • Доступная математика

        • Лаборатория математического онлайн-образования мех...

        • Осенняя универсиада

        • Научно-практическая конференция

        • ВМШ

          • ВМШ - 24

        • Летняя олимпиадная математическая школа РНОМЦ и ме...

      • Государственная итоговая аттестация

      • Дополнительное образование

      • Олимпиады

      • Видеолекции

      • Разное

      • Архив курсов

      • Заочная школа мехмата ЮФУ

Служба поддержки сайта
Вы используете гостевой доступ (Вход)
EV_IT_Meta
Сводка хранения данных
Скачать мобильное приложение Яндекс.Метрика