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

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

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

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

Требуемые условия завершения
Открыто с: пятница, 7 сентября 2018, 00:00
Срок сдачи: пятница, 28 декабря 2018, 22:00

Указание: каждый из пунктов задания должен быть оформлен в отдельном заголовочном файле. Также должен быть один исходный модуль с функцией main(), в которой выполняется тестирование всех реализованных шаблонных функций.

  1. Написать шаблонную функцию, которая находит сумму элементов вектора. Тип элементов должен поддерживать копирование при помощи конструирования, операцию += и инициализацию значением (T()) для возврата ошибочного значения в случае пустого вектора. Проверить работу функции необходимо на следующем типе:

    class NumberInc
    {
    private:
      int m_n;
      NumberInc &operator = (const NumberInc &);
    public:
      NumberInc() : m_n(-12345678) { }
      explicit NumberInc(int n) : m_n(n) { }
      NumberInc &operator += (const NumberInc &rcNumber)
      {
        m_n += rcNumber.m_n;
        return *this;
      }
      friend std::ostream &operator << (std::ostream &rOS, const NumberInc &rcNumber)
      {
        rOS << rcNumber.m_n;
        return rOS;
      } 
    };
    
  2. Написать шаблонную функцию, которая находит сумму элементов в полуинтервале, заданном итераторами начала и конца. Итераторы должны удовлетворять требованиям стандарта для входных итераторов. Проверить работу функции необходимо на итераторах ввода из строкового потока:

      std::istringstream is("1 2 3 4 5 6 7");
      int nSum = sum(
        std::istream_iterator <int> (is),
        std::istream_iterator <int> ());
      std::cout << nSum << std::endl;
    
  3. Написать шаблонную функцию, которая находит среднее арифметическое элементов типа int, хранящихся в произвольном контейнере (шаблонный шаблонный параметр), удовлетворяющем требованиям стандартных контейнеров. Проверить работу функции необходимо на шаблонах std::vector <>, std::list <> и std::set <>.

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

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

    class NumberAdd
    {
    private:
      int m_n;
      NumberAdd &operator = (const NumberAdd &);
    public:
      NumberAdd() : m_n(-12345678) { }
      explicit NumberAdd(int n) : m_n(n) { }
      NumberAdd operator + (const NumberAdd &rcNumber)
      {
        return NumberAdd(m_n + rcNumber.m_n);
      }
      friend std::ostream &operator << (std::ostream &rOS, const NumberAdd &rcNumber)
      {
        rOS << rcNumber.m_n;
        return rOS;
      } 
    };
    
  5. Написать шаблонную функцию, которая по вектору из элементов любого типа возвращает другой вектор, в котором эти элементы упорядочены по возрастанию и отфильтрованы от дубликатов. Тип элементов должен удовлетворять требованиям, достаточным для его хранения в std::set <>. Реализация функции должна использовать локальную переменную типа std::set <T>, в которую необходимо скопировать все элементы входного вектора и которую затем нужно скопировать в выходной вектор.

◄ Презентация к лекции
Задание 2 (индивидуальное): шаблоны функций ►
Пропустить Навигация
Навигация
  • В начало

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

      • Мои курсы

      • Теги

    • Мои курсы

    • Курсы

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

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

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

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

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

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

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

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

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

          • Компьютерная графика-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
Сводка хранения данных
Скачать мобильное приложение Яндекс.Метрика