Программирование. Принципы и практика использования C++ Исправленное издание, стр. 283
20.9. Адаптация встроенных массивов к библиотеке STL
Мы многократно указывали на недостатки встроенных массивов: они неявно преобразуют указатели при малейшем поводе, их нельзя скопировать с помощью присваивания, они не знают своего размера (см. раздел 20.5.2) и т.д. Кроме того, мы отмечали их преимущества: они превосходно моделируют физическую память.
Для того чтобы использовать преимущества массивов и контейнеров, мы можем создать контейнер типа array, обладающий достоинствами массивов, но не имеющий их недостатков. Вариант класса
arrayarray
template <class T, int N> // не вполне стандартный массивstruct array { typedef T value_type; typedef T* iterator; typedef T* const_iterator; typedef unsigned int size_type; // тип индекса T elems[N]; // не требуется явное создание/копирование/уничтожение iterator begin() { return elems; } const_iterator begin() const { return elems; } iterator end() { return elems+N; } const_iterator end() const { return elems+N; } size_type size() const; T& operator[](int n) { return elems[n]; } const T& operator[](int n) const { return elems[n]; } const T& at(int n) const; // доступ с проверкой диапазона T& at(int n); // доступ с проверкой диапазона T * data() { return elems; } const T * data() const { return elems; }};Это определение не полно и не полностью соответствует стандарту, но оно хорошо иллюстрирует основную идею. Кроме того, оно позволяет использовать класс
array<array>array<T,N>N===!=vectorНапример, используем массив со стандартной функцией
high()void f(){ array<double,6> a = { 0.0, 1.1, 2.2, 3.3, 4.4, 5.5 }; array<double,6>::iterator p = high(a.begin(), a.end()); cout << " максимальное значение " << *p << endl;}Обратите внимание на то, что мы не думали о классе
arrayhigh()high()array20.10. Обзор контейнеров
В библиотеке STL есть несколько контейнеров.

Огромный массив дополнительной информации об этих контейнерах и их использовании можно найти в книгах и документации, размещенной в Интернете. Перечислим несколько источников, заслуживающих доверия.
Austern, Matt, ed. “Technical Report on C++ Standard Library Extensions,” ISO/IEC PDTR 19768. (Colloquially known as TR1.)
Austern, Matthew H. Generic Programming and the STL. Addison-Wesley, 1999. ISBN 0201309564. Koenig, Andrew, ed. The C++ Standard. Wiley, 2003. ISBN 0470846747. (Not suitable for novices.)
Lippman, Stanley B., Josée Lajoie, and Barbara E. Moo. The C++ Primer. AddisonWesley, 2005. ISBN 0201721481. (Use only the 4th edition.)
Musser, David R., Gillmer J. Derge, and Atul Saini. STL Tutorial and Reference Guide: C++ Programming with the Standard Template Library, Second Edition. AddisonWesley, 2001. ISBN 0201379236.
Stroustrup, Bjarne. The C++ Programming Language. Addison-Wesley, 2000. ISBN 0201700735.
Документацию о реализации библиотеки STL и библиотеки потоков ввода-вывода компании SGI (Silicon Graphics International) можно найти на веб-странице www.sgi.com/tech/stl>. Обратите внимание, что на этой веб-странице приводятся законченные программы.
Документацию о реализации библиотеки STL компании Dinkumware можно найти на веб-странице www.dinkumware.com/manuals/default.aspx. (Имейте в виду, что существует несколько версий этой библиотеки.)
Документацию о реализации библиотеки STL компании Rogue Wave можно найти на веб-странице www2.roguewave.com/support/docs/index.cfm.
С другой стороны, вы обнаружите, что, освоив классы
vectorlistmap