Программирование. Принципы и практика использования C++ Исправленное издание, стр. 268
for (int i=0; i<sz; ++i) alloc.destroy(&elem[i]); // освобождаем память swap< vector_base<T,A> >(*this,b); // меняем представления // местами}При выходе из функции
reserve()vector_baseswap()<algorithm>swap<vector_base<T,A>>(*this,b)swap(*this,b)*thisbvectorvector_baseswapПОПРОБУЙТЕ
Модифицируйте функцию
reserveauto_ptrvector_baseЗадание
1. Определите класс
template<class T> struct S { T val; };2. Добавьте конструктор, чтобы можно было инициализировать его типом
T3. Определите переменные типов
S<int>S<char>S<double>S<string>S<vector<int>>4. Прочитайте эти значения и выведите их на экран.
5. Добавьте шаблонную функцию
get()val6. Разместите функцию
get()7. Разместите значение
val8. Выполните п. 4, используя функцию
get()9. Добавьте шаблонную функцию
set()10. Замените функции
get()set()operator[] ()11. Напишите константную и неконстантную версии оператора
operator[] ()12. Определите функцию
template<class T> read_val(T& v)cinv13. Используйте функцию
read_val()S<vector<int>>14. Бонус: определите класс
template<class T> istream& operator<<(istream&, vector<T>&)read_val()S<vector<int>>Контрольные вопросы
1. Зачем нужно изменять размер вектора?
2. Зачем нужны разные векторы с разными типами элементов?
3. Почему мы раз и навсегда не резервируем большой объем памяти для векторов?
4. Сколько зарезервированной памяти мы выделяем для нового вектора?
5. Зачем копировать элементы вектора в новую память?
6. Какие операции класса
vector7. Чему равен объект класса
vector8. Какие две операции определяют копию вектора?
9. Какой смысл имеет копирование объектов класса по умолчанию?
10. Что такое шаблон?
11. Назовите два самых полезных вида шаблонных аргументов?
12. Что такое обобщенное программирование?
13. Чем обобщенное программирование отличается от объектно-ориентированного программирования?
14. Чем класс
arrayvector15. Чем класс
array16. Чем функция
resize()reserve()17. Что такое ресурс? Дайте определение и приведите примеры.
18. Что такое утечка ресурсов?
19. Что такое принцип RAII? Какие проблемы он решает?
20. Для чего предназначен класс
auto_ptrТермины

Упражнения
В каждом из упражнений создайте и проверьте (с выводом на печать) набор объектов определенных классов и продемонстрируйте, что ваш проект и реализация действительно работают так, как вы ожидали. Там где задействованы исключения, может потребоваться тщательное обдумывание мест, где могут появиться ошибки.
1. Напишите шаблонную функцию, складывающую векторы элементов любых типов, допускающих сложение.
2. Напишите шаблонную функцию, получающую в качестве аргументов объекты типов
vector<T> vtvector<U> vuvt[i]*vu[i]3. Напишите шаблонный класс
Pair4. Превратите класс
LinkLink<God>5. Определите класс
Intint+–*/<<>>