AutoSkill реализация_memento_customvector_cow_cpp
Реализовать классы Memento и CustomVector на C++ с использованием паттерна Copy-on-Write (COW) для эффективного управления памятью и валидности снимков.
install
source · Clone the upstream repo
git clone https://github.com/ECNU-ICALK/AutoSkill
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ECNU-ICALK/AutoSkill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/SkillBank/ConvSkill/english_gpt3.5_8_GLM4.7/реализация_memento_customvector_cow_cpp" ~/.claude/skills/ecnu-icalk-autoskill-memento-customvector-cow-cpp && rm -rf "$T"
manifest:
SkillBank/ConvSkill/english_gpt3.5_8_GLM4.7/реализация_memento_customvector_cow_cpp/SKILL.mdsource content
реализация_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):
- Используй
для хранения данных внутри CustomVector.std::shared_ptr<std::vector<int>> - Логика модификации: Перед любым изменением данных (PushBack, PopBack, Set) проверяй уникальность указателя (
). Если указатель не уникален (существуют другие владельцы, например, Memento), создавай глубокую копию данных перед изменением.data.unique()
- Используй
- Валидность снимков: Снимок (Memento) должен хранить
на данные. Это гарантирует, что снимок останется валидным, даже если исходный объект CustomVector уничтожен или изменен.shared_ptr - Независимость: Изменения в одном экземпляре CustomVector не должны влиять на данные, захваченные в снимках других экземпляров.
- Формат вывода: Отправляй только код реализуемых классов. Не включай функцию
и директивыmain()
, если это не требуется для компиляции определений классов (обычно платформа подключает заголовки сама).#include
Anti-Patterns
- Не используй сырые указатели (raw pointers) для хранения данных.
- Не создавай глубокую копию всего вектора в Memento при создании снимка (используй shared_ptr).
- Не включай в ответ функцию
или лишниеmain
.#include - Не используй
по значению внутри CustomVector, если это нарушает требования к памяти.std::vector
Triggers
- реализовать паттерн Memento для вектора
- написать классы Memento и CustomVector
- эффективно по памяти Memento C++
- снимок должен быть валиден после уничтожения объекта
- CustomVector CreateMemento Restore