Программирование. Принципы и практика использования C++ Исправленное издание, стр. 257
~vector() { delete[] elem; } // деструктор T& operator[](int n) { return elem[n]; } // доступ: возвращает // ссылку const T& operator[](int n) const { return elem[n]; } int size() const { return sz; } // текущий размер int capacity() const { return space; } void resize(int newsize); // увеличивает вектор void push_back(const T& d); void reserve(int newalloc);};Это определение класса
vectorvectordoubledoubleTvectorvector<double> vd; // T — doublevector<int> vi; // T — intvector<double*> vpd; // T — double*vector< vector<int> > vvi; // T — vector<int>, в котором T — int
vector<char>class vector_char { int sz; // размер char* elem; // указатель на элементы int space; // размер + свободная памятьpublic: vector_char(); explicit vector_char(int s); vector_char(const vector_char&); // копирующий конструктор vector_char& operator=(const vector_char &); // копирующее // присваивание ~vector_char (); // деструктор char& operator[] (int n); // доступ: возвращает ссылку const char& operator[] (int n) const; int size() const; // текущий размер int capacity() const; void resize(int newsize); // увеличение void push_back(const char& d); void reserve(int newalloc);};Для класса
vector<double>vectordoublevector<double>
vector<char>vector<Poly_line*>vectorvectorКонкретизация шаблона (генерирование шаблонных специализаций) осуществляется на этапе компиляции или редактирования связей, а не во время выполнения программы.
Естественно, шаблонный класс может иметь функции-члены. Рассмотрим пример.
void fct(vector<string>& v){ int n = v.size(); v.push_back("Norah"); // ...}При вызове такой функции-члена шаблонного класса компилятор генерирует соответствующую конкретную функцию. Например, когда компилятор видит вызов
v.push_back("Norah"), он генерирует функциюvoid vector<string>::push_back(const string& d) { /* ... */ }используя шаблонное определение
template<class T> void vector<T>::push_back(const T& d) { /* ... */ };Итак, вызову
v.push_back("Norah")Вместо префикса
template<class T>template <typename T>typenameintclassclass