Задания по С++ — различия между версиями

Материал из SEWiki
Перейти к: навигация, поиск
(Задание merge sort)
(добавил задание на шалоны)
Строка 1: Строка 1:
 
== Лабораторная работа №1 ==
 
== Лабораторная работа №1 ==
 +
=== Шаблоны ===
 +
Реализовать собственный контейнер
 +
<source lang="cpp">template<typename T>
 +
class Container {
 +
public:
 +
    void push_back(const T& t);
 +
    T& back();
 +
    size_t size() const;
 +
};</source>
 +
В качестве хранилища значенией в реализации <code>Container</code> используйте <code>std::vector</code>.
  
Задание
+
Затем создайте новый контейнер с двумя шаблонными параметрами, первый - тип хранимых значений, второй - тип хранилища, используемый в реализации вашего контейнера.
 +
 
 +
Пример использования такого контейнера
 +
<source lang="cpp">
 +
Container<int, std::list<int> > c;
 +
</source>
 +
 
 +
Затем создайте новый контейнер с двумя шаблонными параметрами, первый - тип хранимых значений, второй - шаблон, используемый в реализации вашего контейнера.
 +
 
 +
Пример использования такого контейнера
 +
<source lang="cpp">
 +
Container<int, std::deque> c;
 +
</source>
  
 
== Лабораторная работа №2 ==
 
== Лабораторная работа №2 ==
 +
=== Синглтон ===
 +
  
Задание
+
<!-- Написать протой логгер
 +
<source lang="cpp">class Logger {
 +
public:
 +
    void log(const std::string& msg);
 +
    static Logger& getInstance();
 +
};
 +
</source>
 +
Запретить пользователю его создание, копирование.
  
 +
Пример использования
 +
-->
 
== Лабораторная работа №3 ==
 
== Лабораторная работа №3 ==
  
=== Задание merge sort ===
+
=== merge sort ===
 
Необходимо написать функцию сортировки слиянием.<br />
 
Необходимо написать функцию сортировки слиянием.<br />
 
Сигнатура функции должны быть такой:<br />
 
Сигнатура функции должны быть такой:<br />

Версия 11:52, 23 марта 2011

Лабораторная работа №1

Шаблоны

Реализовать собственный контейнер

template<typename T>
class Container {
public:
    void push_back(const T& t);
    T& back();
    size_t size() const;
};

В качестве хранилища значенией в реализации Container используйте std::vector.

Затем создайте новый контейнер с двумя шаблонными параметрами, первый - тип хранимых значений, второй - тип хранилища, используемый в реализации вашего контейнера.

Пример использования такого контейнера

Container<int, std::list<int> > c;

Затем создайте новый контейнер с двумя шаблонными параметрами, первый - тип хранимых значений, второй - шаблон, используемый в реализации вашего контейнера.

Пример использования такого контейнера

Container<int, std::deque> c;

Лабораторная работа №2

Синглтон

Лабораторная работа №3

merge sort

Необходимо написать функцию сортировки слиянием.
Сигнатура функции должны быть такой:

template<typename Iter>
std::list<typename Iter::value_type> mergeSort(Iter left, Iter right);

Исходные данные функция модифицировать не должна, в возвращаемом списке должны быть отсортированные элементы.

Затем необходимо добиться, чтоб можно было сортировать по указателям:

int* array = new int[SIZE];
mergeSort(array, array + SIZE);

Рекомендации: для merge можно воспользоваться std::list::merge
для получения типа, на который указывает указатель, можно воспользоваться std::iterator_traits

Лабораторная работа №4

Задание

Лабораторная работа №5

Задание

To be continued