Every STL container uses an allocator that encapsulates the memory model that the specific platform uses. Allocators hide the platform-dependent details such as the size of pointers, memory organization, reallocation model, and memory page size. Since a container can work with different allocator types, it can easily work in different environments simply by plugging a different allocator to it. Every implementation provides a suitable allocator by default. Normally, users should not override the default allocator but they may do so for special purposes.