C++98:
1、相同点:
Allocators having the same type were assumed to be equal so that memory allocated by one
allocator could be deallocated by another allocator of the same type.
It was not possible to change the memory resource at runtime.
Allocators had limitations in the ability to hold a state, such as bookkeeping information or
information about where to allocate next.
2、区别:
Allocators were not swapped when the containers were swapped.
Allocators were not handled consistently, because copy constructors copied allocators, whereas
the assignment operator did not. Thus, the copy constructor did not have the same effect as
calling the default constructor and the assignment operator afterward.
C++11:
A couple of proposed changes to C++11 are intended to solve all these issues. For example:
• Library components are no longer allowed to assume that all allocators of a specific type compare
equal.
• Allocator traits solve some of the problems created by stateful allocators.
• A scoped allocator adapter provides the ability used to propagate the allocator from the container
to the contained elements.
These enhancements provide the tools to build a polymorphic allocator, which allows to compare or
assign two containers with different allocator types that are derived from a common allocator type
the container uses. However, due to time constraints, a standard polymorphic allocator is not part of
C++11.
而STL Container在create时可以指定criterion
copy和assign的时候许指定Criterion,否则使用默认项
swap的时候尽可能交换sorting criterion, equivalence predicate,and hash function object