/*
* Types defined in a container
*/
template <class T, class A = allocator<T> > class std::vector {
public:
// types:
typedef T value_type; // type of element
typedef A allocator_type; // type of memory manager
typedef typename A::size_type size_type;
typedef typename A::difference_type difference_type;
typedef implementation_dependent1 iterator; // T*
typedef implementation_dependent2 const_iterator; // const T*
typedef std::reverse_iterator<iterator> reverse_iterator;
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
typedef typename A::pointer pointer; // pointer to element
typedef typename A::const_pointer const_pointer;
typedef typename A::reference reference; // reference to element
typedef typename A::const_reference const_reference;
// ...
};
/*
* usage of types declared in a container
* makes you be able to write generic code
*
*/
template<class C> typename C::value_type sum(const C& c)
{
typename C::value_type s = 0;
typename C::const_iterator p = c.begin(); // start at the beginning
while (p!=c.end()) { // continue until the end
s += *p; // get value of element
++p; // make p point to next element
}
return s;
}