The concept of STL is based on a separation of data and operations. The data
is managed by container classes, and the operations are defined by configurable
algorithms. Iterators are the glue between these two components and they let any
algorithm interact with any container.
1 template<T>
2 Print(List<T> & container)
3 {
4 for(T item: container)
5 {
6 //...
7 }
8 }
9
10 template<T>
11 Print(iterator<T> begin, iterator<T> end)
12 {
13 for(;begin < end && begin != end; begin ++)
14 {
15 //...
16 }
17 }
The STL concept contradicts the original idea of object-oriented programming:
the STL serarates data and algorithms rather than combining them. While you can
combine every kinds of container with ever kind of algorithm, so the result
is a very flexible but still rather small framework.
The particular implementation of any container is not defined by the C++
standard library. However, the behavior and complexity secified by the standard
do not leave much room for variation.
The STL containers provide only those special member functions that in
general have "good" performance, where "good" normal means constant or
logarithmic complexity. e.g., a direct element access by using operator [] is
not provided for lists. This is because lists don‘t provide random access, and
so an operator [] would have bad performance.
Which is also most like why there is no resize() for array.
the philosophy behind of the design of the STL