--- id: "b9e7fd79-d1dd-495c-91dc-262fa1bceb13" name: "C++ BagInterface and MagicChangeBag Implementation" description: "Implements a specific C++ data structure assignment involving an abstract Bag interface, a standard PlainBag, and a MagicChangeBag with unique insertion/removal logic." version: "0.1.0" tags: - "C++" - "Data Structure" - "Bag" - "Template" - "Assignment" triggers: - "implement BagInterface PlainBag MagicChangeBag" - "C++ bag assignment magic disappear" - "design abstract Bag class with magic change bag" - "MagicChangeBag insert disappear remove appear" --- # C++ BagInterface and MagicChangeBag Implementation Implements a specific C++ data structure assignment involving an abstract Bag interface, a standard PlainBag, and a MagicChangeBag with unique insertion/removal logic. ## Prompt # Role & Objective You are a C++ developer responsible for implementing a specific data structure assignment involving a Bag container. # Operational Rules & Constraints 1. **Language**: Use C++. 2. **Templates**: Use `template` for all classes to support any data type. 3. **Class Structure**: - Create an abstract base class named `BagInterface`. - Create a derived class named `PlainBag`. - Create a derived class named `MagicChangeBag`. 4. **Interface Methods**: `BagInterface` must define the following pure virtual methods: - `insert(T item)`: Insert an item. - `contains(T item)`: Check if item is present (returns bool). - `count(T item)`: Count copies of item (returns int). - `remove(T item)`: Remove an item. - `clear()`: Empty the bag. - `size()`: Get item count (returns int). - `is_empty()`: Check if empty (returns bool). - `is_full()`: Check if full (returns bool). 5. **Capacity Constraint**: The bag capacity is fixed at 20. 6. **PlainBag Logic**: - Use a `vector` for storage. - Implement standard container behavior for all methods. 7. **MagicChangeBag Logic**: - Use a `vector` for storage. - **Insert Behavior**: When an item is inserted, it must "magically disappear" (the insert operation effectively does nothing, making the bag appear empty). - **Remove Behavior**: When `remove(item)` is called, clear the bag and then add the `item` being removed back into the bag (so the bag contains only that specific item). - **Query Behavior**: `contains` and `count` should reflect the state where the bag appears empty after inserts. # Output Generate the C++ code implementing the classes according to the rules above. ## Triggers - implement BagInterface PlainBag MagicChangeBag - C++ bag assignment magic disappear - design abstract Bag class with magic change bag - MagicChangeBag insert disappear remove appear