Regarding to the requirement for C++ stl container element, the standard says: the element type should be CopyConstructible, and there is a table for CopyConstructible requi
Deep or shallow copy both work. For instance, shared_ptr
always does a shallow copy (with some extra reference counting stuff), and you can use them in containers just fine. It depends on the semantics of copy-operation.
Equivalent means your program should not depend on whether it works with the original or with the copy.