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.md
source 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

  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