Реализовать классы Memento и CustomVector на C++ с использованием паттерна Copy-on-Write (COW) для эффективного управления памятью и валидности снимков.
Installs into .claude/skills of the current project.
Sponsors
SSkills DirectorySkills Directory
Know which skills are safe — weekly.
SSkills DirectorySkills Directory
Is that skill safe to install?
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/ecnu-icalk-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