1. Да се реализира йерархия, която позволява създаването на хетерогенен списък от контейнери от елементи от произволен тип T. Контейнерите могат да бъдат списъци, стекове и опашки. Да се реализира функция, която изтрива от хетерогенния списък всички контейнери, които имат елемент удовлетворяващ зададен като параметър предикат bool (pred*)(T).
    Упътване: Напишете абстрактен клас Container<T>, който има чиста виртуална функция bool exists(bool (pred*)(T)). Направете шаблони CList<T>, CQueue<T>, CStack<T> които наследяват Container<T> и съответния шаблон за структурата от данни и реализират методът от по-висок ред exists. С негова помощ напишете шаблон на функция от по-висок ред void filter(LList<void*> l, bool (pred*)(T)), която решава задачата.
    С помощта на функцията filter решете задачата: от хетерогенен списък от списъци, стекове и опашки от числа да се изтрият всички контейнери, които съдържат отрицателен елемент.
  2. Да се реализира йерархия, която позволява създаването на хетерогенен списък от контейнери от елементи от произволен тип T. Контейнерите да имат шаблон на функция от по-висок ред void accummulate(void (addElement*)(U&,T),U& buffer), която реализира натрупва в U& buffer елементите на контейнера с подадената като аргумент функция addElement. За целта напишете абстрактен клас Container<T,U>, където T е типът на елементите на контейнера, а U е типът на буфера. Нека по подразбиране U = T. Идеята е, че ако елементите са double, то те се натрупват отново в double (например при събиране, умножение...), но ако елементите са char, то те могат да се натрупват например в буфер char*. Наследете този шаблон и съответния шаблон за структурата от данни в шаблоните CList<T,U>, CQueue<T,U>, CStack<T,U>.
    С помощта на тази йерархия решете задачата: даден е хетерогенен списък от списъци, стекове и опашки от символи. Да се намерят думите, които се получават от конкатенирането на символите от всеки контейнер и и изречението, което се получава от последователното конкатениране на думите от контейнерите. За целта дефинирайте хетерогенния списък като CList<void*, char*>, чиито елементи каствайте до Container<char,char*>. Напишете подходящи функции addChar и addWord, които да подадете на accummulate.
Последно модифициране: събота, 12 ноември 2011, 17:38