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

Материал из SEWiki
Перейти к: навигация, поиск
(добавил задание на шалоны)
Строка 27: Строка 27:
 
== Лабораторная работа №2 ==
 
== Лабораторная работа №2 ==
 
=== Синглтон ===
 
=== Синглтон ===
 
  
 
<!-- Написать протой логгер
 
<!-- Написать протой логгер
Строка 40: Строка 39:
 
Пример использования
 
Пример использования
 
-->
 
-->
== Лабораторная работа №3 ==
 
  
 +
== Лабораторная работа №3 ==
 
=== merge sort ===
 
=== merge sort ===
 
Необходимо написать функцию сортировки слиянием.<br />
 
Необходимо написать функцию сортировки слиянием.<br />
Строка 57: Строка 56:
  
 
== Лабораторная работа №4 ==
 
== Лабораторная работа №4 ==
 
+
=== iterator ===
Задание
+
Написать наблонный класс <code>slist</code> односвязный список.<br />
 +
Реализовать для него <code>forward</code> итератор.
  
 
== Лабораторная работа №5 ==
 
== Лабораторная работа №5 ==
 +
=== functor ===
 +
Реализовать алгоритм
 +
<source lang="cpp">
 +
template<typename InIter, typename OutIter, typename Pred>
 +
OutIter filter(InIter begin, InIter end, OutIter out, Pred pred);
 +
</source>
 +
который читает елементы и, если <code>pred(val)</code> возвращает <code>true</code>, то записывает елемент в <code>out</code>.
 +
 +
Реализовать собственный функтор, который принимает <code>std::set<char></code> и <code>char</code> и проверят наличие входного символа в сете.
 +
С помощью алгоритма <code>filter</code> и вашего функтора отфильровать строку.
  
Задание
 
  
== To be continued ==
+
== Лабораторная работа №6 ==
 +
=== mem_fun ===

Версия 09:14, 30 марта 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

iterator

Написать наблонный класс slist односвязный список.
Реализовать для него forward итератор.

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

functor

Реализовать алгоритм

template<typename InIter, typename OutIter, typename Pred>
OutIter filter(InIter begin, InIter end, OutIter out, Pred pred);

который читает елементы и, если pred(val) возвращает true, то записывает елемент в out.

Реализовать собственный функтор, который принимает std::set<char> и char и проверят наличие входного символа в сете. С помощью алгоритма filter и вашего функтора отфильровать строку.


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

mem_fun