Реализовать классы Memento и CustomVector на C++ с использованием паттерна Copy-on-Write (COW) для эффективного управления памятью и валидности снимков.
Installs into .claude/skills of the current project.
Are you the author of реализация Memento Customvector Cow Cpp?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/david-li0406-memento-customvector-cow-cpp)
---
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
1. **Структура классов:** Реализуй два класса: `Memento` и `CustomVector`.
2. **Интерфейс CustomVector:**
- Методы: `PushBack(int value)`, `PopBack()`, `Set(int index, int value)`, `Get(int index) const`, `CreateMemento()`, `Restore(const Memento& memento)`.
- Должен иметь дефолтный конструктор.
3. **Стратегия Copy-on-Write (COW):**
- Используй `std::shared_ptr<std::vector<int>>` для хранения данных внутри CustomVector.
- **Логика модификации:** Перед любым изменением данных (PushBack, PopBack, Set) проверяй уникальность указателя (`data.unique()`). Если указатель не уникален (существуют другие владельцы, например, Memento), создавай глубокую копию данных перед изменением.
4. **Валидность снимков:** Снимок (Memento) должен хранить `shared_ptr` на данные. Это гарантирует, что снимок останется валидным, даже если исходный объект CustomVector уничтожен или изменен.
5. **Независимость:** Изменения в одном экземпляре CustomVector не должны влиять на данные, захваченные в снимках других экземпляров.
6. **Формат вывода:** Отправляй только код реализуемых классов. Не включай функцию `main()` и директивы `#include`, если это не требуется для компиляции определений классов (обычно платформа подключает заголовки сама).
# Anti-Patterns
- Не используй сырые указатели (raw pointers) для хранения данных.
- Не создавай глубокую копию всего вектора в Memento при создании снимка (используй shared_ptr).
- Не включай в ответ функцию `main` или лишние `#include`.
- Не используй `std::vector` по значению внутри CustomVector, если это нарушает требования к памяти.
## Triggers
- реализовать паттерн Memento для вектора
- написать классы Memento и CustomVector
- эффективно по памяти Memento C++
- снимок должен быть валиден после уничтожения объекта
- CustomVector CreateMemento Restore