B0 — различия между версиями
(Отмена правки 5766, сделанной участником Alexey.kudinkin (обс.)) |
(Отмена правки 5765, сделанной участником Alexey.kudinkin (обс.)) |
||
Строка 1: | Строка 1: | ||
− | = | + | = Осенний Семестр = |
− | + | TBD | |
− | + | = Весенний Семестр = | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | == #2 Vector == | |
− | + | ==== Part One ==== | |
− | + | Implement vector-alike container matching performance requirements of the `std::vector`. | |
− | + | It should contain implementation for the following methods matching behaviour of the ones of `std::vector`: | |
− | + | ||
− | + | ||
− | + | ||
− | + | * ''push_back'' | |
− | + | * ''pop_back'' | |
− | + | * ''insert'' | |
+ | * ''clear'' | ||
+ | * ''resize'' | ||
+ | * ''back'' | ||
+ | * ''size'' | ||
+ | * ''begin/rbegin'' | ||
+ | * ''end/rend'' | ||
− | + | As a reference consider [http://en.cppreference.com/w/cpp/container/vector en.cppreference.com]. | |
− | + | ==== Part Two ==== | |
− | + | Implement '''specialization''' of already implemented (template-) container for the simple type `'''bool'''` being ''as compact as possible''. | |
− | + | ||
− | + | ||
− | + | == #3 Throwing Vector == | |
+ | Now you've got an insight what the C++ exceptions are, implement all error handling inside your implementation of the `vector`, relying ''solely'' upon the exceptions mechanism. | ||
+ | |||
+ | That means: no more `_Exit`s, `abort`s, etc. Exceptions '''only'''. | ||
+ | |||
+ | == #4 Deque == | ||
+ | |||
+ | Implement double-ended queue matching interface of thereof inside STL ([http://en.cppreference.com/w/cpp/container/deque std::deque]) and ''matching'' its performance requirements. | ||
+ | |||
+ | At the very least, it should contain following members: | ||
+ | |||
+ | * ''push_back'' | ||
+ | * ''pop_back'' | ||
+ | * ''push_front'' | ||
+ | * ''pop_front'' | ||
+ | * ''insert'' | ||
+ | * ''clear'' | ||
+ | * ''resize'' | ||
+ | * ''back'' | ||
+ | * ''front'' | ||
+ | * ''size'' | ||
+ | * ''begin/rbegin'' | ||
+ | * ''end/rend'' | ||
+ | |||
+ | '''NB''': Implementing deque matching performance requirements of the STL one, try to minimize ''unused'' memory 'committed' by your implementation. | ||
+ | |||
+ | If you consider that it's impossible, be ready to assure your point. | ||
+ | |||
+ | == #5 Exceptions Guarantees == | ||
+ | |||
+ | ==== Main ==== | ||
+ | |||
+ | Reconsider your own `vector` implementation towards making it ''[http://en.wikipedia.org/wiki/Exception_safety exception-safe]''. | ||
+ | |||
+ | Following members of your `vector` implementation should be reconsidered to match corresponding ''[http://en.wikipedia.org/wiki/Exception_safety exception-safety guarantees]'': | ||
+ | |||
+ | * '''operator=''' / strong | ||
+ | * '''push_back''' / strong | ||
+ | |||
+ | ==== Extra ==== | ||
+ | |||
+ | Try match your implementation on the functions predefined inside STL. | ||
+ | |||
+ | Try to reduce boilerplate inside your implementation relying on the standard-library defined functions. | ||
+ | |||
+ | ''Hint'': see [http://en.cppreference.com/w/cpp/header/memory memory] header closely. | ||
+ | |||
+ | == <algorithm> quiz == | ||
+ | |||
+ | * Implement ''in-place'' function ''rotating'' supplied sequence to the left, having following interface: | ||
+ | |||
+ | <source lang="cpp"> | ||
+ | template<typename It> | ||
+ | void rotate(It first, It new_first, It last); | ||
+ | /* first -- iterator pointing to the first element */ | ||
+ | /* new_first -- iterator pointing to the element, that should become first after rotation is finished */ | ||
/* last -- iterator pointing past the last element */ | /* last -- iterator pointing past the last element */ | ||
− | |||
− | |||
</source> | </source> | ||
+ | |||
+ | * Implement [http://en.wikipedia.org/wiki/Insertion_sort Insertion Sort] '''without''' loops, using only utilitiies provided by STL. | ||
+ | |||
+ | * TBD |
Версия 22:59, 24 апреля 2015
Содержание
Осенний Семестр
TBD
Весенний Семестр
#2 Vector
Part One
Implement vector-alike container matching performance requirements of the `std::vector`.
It should contain implementation for the following methods matching behaviour of the ones of `std::vector`:
- push_back
- pop_back
- insert
- clear
- resize
- back
- size
- begin/rbegin
- end/rend
As a reference consider en.cppreference.com.
Part Two
Implement specialization of already implemented (template-) container for the simple type `bool` being as compact as possible.
#3 Throwing Vector
Now you've got an insight what the C++ exceptions are, implement all error handling inside your implementation of the `vector`, relying solely upon the exceptions mechanism.
That means: no more `_Exit`s, `abort`s, etc. Exceptions only.
#4 Deque
Implement double-ended queue matching interface of thereof inside STL (std::deque) and matching its performance requirements.
At the very least, it should contain following members:
- push_back
- pop_back
- push_front
- pop_front
- insert
- clear
- resize
- back
- front
- size
- begin/rbegin
- end/rend
NB: Implementing deque matching performance requirements of the STL one, try to minimize unused memory 'committed' by your implementation.
If you consider that it's impossible, be ready to assure your point.
#5 Exceptions Guarantees
Main
Reconsider your own `vector` implementation towards making it exception-safe.
Following members of your `vector` implementation should be reconsidered to match corresponding exception-safety guarantees:
- operator= / strong
- push_back / strong
Extra
Try match your implementation on the functions predefined inside STL.
Try to reduce boilerplate inside your implementation relying on the standard-library defined functions.
Hint: see memory header closely.
<algorithm> quiz
- Implement in-place function rotating supplied sequence to the left, having following interface:
template<typename It>
void rotate(It first, It new_first, It last);
/* first -- iterator pointing to the first element */
/* new_first -- iterator pointing to the element, that should become first after rotation is finished */
/* last -- iterator pointing past the last element */
- Implement Insertion Sort without loops, using only utilitiies provided by STL.
- TBD