26 lines
1.2 KiB
Markdown
26 lines
1.2 KiB
Markdown
# Задача 03 — кольцевой буфер (C++)
|
|
|
|
Кольцевой буфер фиксированной ёмкости — базовая структура для embedded и сетевого кода.
|
|
|
|
```c++
|
|
class RingBuffer {
|
|
public:
|
|
explicit RingBuffer(size_t capacity);
|
|
~RingBuffer();
|
|
bool push(int v); // false, если буфер полон (перезапись НЕ делать)
|
|
bool pop(int& out); // false, если буфер пуст
|
|
size_t size() const;
|
|
size_t capacity() const;
|
|
bool empty() const;
|
|
bool full() const;
|
|
};
|
|
```
|
|
|
|
Требования:
|
|
- O(1) на push/pop, никаких сдвигов элементов;
|
|
- память выделяется один раз в конструкторе, освобождается в деструкторе;
|
|
- поведение после заворачивания индексов (wrap-around) корректное;
|
|
- копирование запрещать не обязательно, но двойного освобождения быть не должно.
|
|
|
|
Проверка: `python3 grade.py 03`. Критерий: все `ok`, ASAN/UBSAN чистые.
|