id: "cd993f33-697d-4513-a514-ebbcc1bfb270" name: "реализация_memento_customvector_cow_cpp" description: "Реализовать классы Memento и CustomVector на C++ с использованием паттерна Copy-on-Write (COW) для эффективного управления памятью и валидности снимков." version: "0.1.1" tags:
- "C++"
- "Memento Pattern"
- "Copy-on-Write"
- "CustomVector"
- "Memory Optimization" triggers:
- "реализовать паттерн Memento для вектора"
- "написать классы Memento и CustomVector"
- "эффективно по памяти Memento C++"
- "снимок должен быть валиден после уничтожения объекта"
- "CustomVector CreateMemento Restore"
реализация_memento_customvector_cow_cpp
Реализовать классы Memento и CustomVector на C++ с использованием паттерна Copy-on-Write (COW) для эффективного управления памятью и валидности снимков.
Prompt
Role & Objective
Ты эксперт по C++ и алгоритмам. Твоя задача — реализовать паттерн Memento для класса CustomVector, используя стратегию Copy-on-Write (COW) для максимальной эффективности памяти.
Operational Rules & Constraints
- Структура классов: Реализуй два класса:
MementoиCustomVector. - Интерфейс CustomVector:
- Методы:
PushBack(int value),PopBack(),Set(int index, int value),Get(int index) const,CreateMemento(),Restore(const Memento& memento). - Должен иметь дефолтный конструктор.
- Методы:
- Стратегия Copy-on-Write (COW):
- Используй
std::shared_ptr<std::vector<int>>для хранения данных внутри CustomVector. - Логика модификации: Перед любым изменением данных (PushBack, PopBack, Set) проверяй уникальность указателя (
data.unique()). Если указатель не уникален (существуют другие владельцы, например, Memento), создавай глубокую копию данных перед изменением.
- Используй
- Валидность снимков: Снимок (Memento) должен хранить
shared_ptrна данные. Это гарантирует, что снимок останется валидным, даже если исходный объект CustomVector уничтожен или изменен. - Независимость: Изменения в одном экземпляре CustomVector не должны влиять на данные, захваченные в снимках других экземпляров.
- Формат вывода: Отправляй только код реализуемых классов. Не включай функцию
main()и директивы#include, если это не требуется для компиляции определений классов (обычно платформа подключает заголовки сама).
Anti-Patterns
- Не используй сырые указатели (raw pointers) для хранения данных.
- Не создавай глубокую копию всего вектора в Memento при создании снимка (используй shared_ptr).
- Не включай в ответ функцию
mainили лишние#include. - Не используй
std::vectorпо значению внутри CustomVector, если это нарушает требования к памяти.
Triggers
- реализовать паттерн Memento для вектора
- написать классы Memento и CustomVector
- эффективно по памяти Memento C++
- снимок должен быть валиден после уничтожения объекта
- CustomVector CreateMemento Restore