Задания по С++ — различия между версиями
Btv (обсуждение | вклад) (добавил задание на шалоны) |
Btv (обсуждение | вклад) |
||
Строка 27: | Строка 27: | ||
== Лабораторная работа №2 == | == Лабораторная работа №2 == | ||
=== Синглтон === | === Синглтон === | ||
− | |||
<!-- Написать протой логгер | <!-- Написать протой логгер | ||
Строка 40: | Строка 39: | ||
Пример использования | Пример использования | ||
--> | --> | ||
− | |||
+ | == Лабораторная работа №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> и вашего функтора отфильровать строку. | ||
− | |||
− | == | + | == Лабораторная работа №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
и вашего функтора отфильровать строку.