Третья группа — различия между версиями
Smal (обсуждение | вклад) (→Streams) |
|||
Строка 20: | Строка 20: | ||
Наследуясь от класса OutputStream реализовать Иерархию классов FileOutputStream, StringOutputStream, ConsoleOutputStream имеющие соответствующую функциональность. | Наследуясь от класса OutputStream реализовать Иерархию классов FileOutputStream, StringOutputStream, ConsoleOutputStream имеющие соответствующую функциональность. | ||
− | < | + | <cpp> |
struct OutputStream | struct OutputStream | ||
{ | { | ||
Строка 43: | Строка 43: | ||
virtual ~OutputStream() {} | virtual ~OutputStream() {} | ||
}; | }; | ||
− | </ | + | </cpp> |
− | + | ||
== Rationals == | == Rationals == |
Версия 13:38, 12 марта 2015
Содержание
- 1 Общее
- 2 Задания
- 2.1 Компиляция
- 2.2 Сортировка слиянием
- 2.3 Выделение памяти
- 2.4 Расширяющийся массив
- 2.5 Обертка над FILE
- 2.6 String
- 2.7 Smart FILE
- 2.8 Streams
- 2.9 Rationals
- 2.10 Smart-Pointers
- 2.11 Array/Bool-Array/Stack
- 2.12 Mergesort | Stack/Queue
- 2.13 Unordered Map
- 2.14 Proximity Iterator
- 2.15 Algorithms
- 2.16 std::bind/std::mem_fn
- 2.17 Exceptions
- 2.18 Exception-Safety
- 2.19 C++/C Casts
- 2.20 Boost Lambda
- 2.21 Metaprogramming
Общее
Задания
Компиляция
Сортировка слиянием
Выделение памяти
Расширяющийся массив
Обертка над FILE
String
Smart FILE
Streams
Наследуясь от класса OutputStream реализовать Иерархию классов FileOutputStream, StringOutputStream, ConsoleOutputStream имеющие соответствующую функциональность.
<cpp> struct OutputStream {
virtual void print( std::string const& s ) = 0;
virtual void print( int t ) { char buff[16] = {}; sprintf(buff, "%d", t); print(buff); }
virtual void print( double t ) { char buff[16] = {}; sprintf(buff, "%f", t); print(buff); }
virtual void flush() = 0;
virtual ~OutputStream() {}
}; </cpp>
Rationals
// Rational.h class Rational { Rational & operator+=( Rational const& b ); Rational & operator-=( Rational const& b ); Rational & operator/=( Rational const& b ); Rational & operator*=( Rational const& b ); Rational operator-() const; double to_double() const; int nom(); int den(); }; ostream & operator<<(ostream & os, Rational const& r); istream & operator>>(istream & is, Rational & r); Rational operator+( Rational a, Rational const& b ); Rational operator-( Rational a, Rational const& b ); Rational operator/( Rational a, Rational const& b ); Rational operator*( Rational a, Rational const& b ); bool operator==( Rational const& a, Rational const& b ); bool operator!=( Rational const& a, Rational const& b ); bool operator<( Rational const& a, Rational const& b ); bool operator<=( Rational const& a, Rational const& b ); bool operator>( Rational const& a, Rational const& b ); bool operator>=( Rational const& a, Rational const& b ); ~
Smart-Pointers
scoped_ptr: http://www.boost.org/doc/libs/1_52_0/libs/smart_ptr/scoped_ptr.htm
shared_ptr: http://www.boost.org/doc/libs/1_52_0/libs/smart_ptr/shared_ptr.htm
Array/Bool-Array/Stack
template <class T, size_t Size> struct Array { T & operator[]( size_t i ); T const& operator[]( size_t i ) const; size_t size() const; void resize( size_t size ); }; template < class T, size_t Size, template < class, size_t > class Storage > struct Stack { T const& top() const; T & top(); void push(T const& t); void pop(); };
Mergesort | Stack/Queue
К выполнению предлагаются любое из двух заданий:
Реализовать процедуру сортировки, основанную на алгоритме merge-sort, принимающую на вход bidirectional (!) итераторы указывающие на начало и окончание сортируемого интервала.
template<typename _BidirIt, typename _Comp> void mergesort(_BidirIt begin, _BidirIt end, _Comp c);
Реализовать контейнер семантически эквивалентный std::stack. На его основе (!) реализовать контейнер семантически эквивалентный std::queue, операции по добавлению в конец и чтению из начала для которого будут иметь сложность amortized O(1).
Unordered Map
https://www.dropbox.com/sh/9dye3j9z3iwzwex/SbSKsDzz_K
Proximity Iterator
https://www.dropbox.com/sh/ldbnv7z4urkqcxy/nsP4Hj0YWo
Algorithms
Предлагается реализовать следующие алгоритмы STL для двух категорий итераторов: RandomAccessIterator и ForwardIterator
std::rotate // in-place std::reverse // in-place std::random_shuffle // in-place
Пример реализации std::rotate для RandomAccessIterator: https://www.dropbox.com/s/82q3l2pxuvfrnlo/rotate.cc
std::bind/std::mem_fn
https://www.dropbox.com/s/gjzafi0ocb6pcc6/assignment.cc?m
Exceptions
https://www.dropbox.com/s/uwmhwyy07tu5ktc/assignment.cc
https://www.dropbox.com/s/hwgkkxsk1y91plt/new_assignment.cc
Exception-Safety
https://www.dropbox.com/sh/44smc9glbtofma9/zWR4_tj9sj
C++/C Casts
https://www.dropbox.com/s/we7ipab9oqmdj97/assignment.cc
Boost Lambda
https://www.dropbox.com/s/i2a6rc1ftlq26lk/bll.cc