Несколько доп. задач про операторы, про контейнеры STL и про RAII:
Просто как напоминание:
Эти задачи надо сделать до 1 мая
1. Пусть я хочу для отладки в некоторых своих функциях печатать в начале "Function started" (ну или какой-то похожий текст), а в конце работы функции хочу печатать "Function finished" и время, сколько она работала, в секундах.
Как сделать, чтобы для этого мне поменьше надо было писать? И чтобы все правильно работало и с исключениями? Наверное, тут нужен воспомогательный класс. Опишите его и приведите пример его использования.
Справка: чтобы замерить время, можно написать как-то так:
#include <time.h>
...
time_t secs = time(0);
// time(0) возвращает количество секунд, прошедших с 1 января 1970
// Тип time_t - это очень большое целое число
2. Определите для rational оператор вывода <<.
Справка: для этого надо написать такие заклинания:
ostream& operator<<(ostream& output, const rational& r)
{
... тут код, который печатает r ...
return output;
}
(Это все пиштся вне класса, это обычная функция, не метод класса)
3. Пусть я хочу сделать set из обьектов типа rational. Что для этого надо определить для rational?
Определите необходимый оператор. Приведите пример (опишите set, добавьте в него несколько элементов и напечатайте их).
4. Дан список целых чисел (list<int>). Проверить, есть ли в нем два одинаковых числа и напечатать "да" или "нет".
Замечание: В этой задаче давайте считать, что чисел в списка немного (10-20, например), и самое быстрое - это просто сравнить каждый с каждым.
5. То же условие, что в задаче 4, но тут давайте считать, что чисел в списке много (больше 10000, например), и тут надо придумать более быстрый способ (я бы лично использовал воспомогательный set).
6. Опишите класс queue (очередь из целых чисел) с методами push и pop. Интерфейс пусть будет такой же, как в классе stack, который мы когда-то писали, но только pop возвращает _первый_ добавленный элемент. Для реализации используйте, пожалуйста, стандартный класс deque
Если в условиях что-то непонятно, пишите, пожалуйста!