В настоящее время практически отпала
необходимость использовать подобные динамические массивы, поскольку в
стандартной библиотеке шаблонов С++ (STL) разработаны такие
структуры данных, называемые контейнерами, которые по существу являются
динамическими массивами, но с значительно расширенными функциональными
возможностями. Речь идет о последовательном контейнере vector.
В
этом контейнере изменение размера массива при его заполнении происходит
автоматически, невидимо для пользователя. Кроме того, vector
входит в семейство контейнеров STL, поэтому в вашем распоряжении
оказывается весь мощный арсенал алгоритмов STL, работающих с этими
контейнерами.
Чтобы убедить вас в преимуществе vector перед традиционными динамическими массивами, рассмотрим простой пример.
Пример 1
Создать одномерный динамический массив произвольного размера. Размер массива должен изменяться при его заполнении.
// Традиционный подход
constintM = 5;
inttemp, * Z=new int[M]; //Массив начального размера
for(int i=0;1;i++)
{ cout<<i+1<<"-й элемент ";
cin>>temp;
if(temp==0)
break; //Ограничитель ввода
else(i%M==0) //Массив уже заполнен?
{ int *q=new int[i+M]; // Создаем новый массив и переписываем
for(int j=0;j<i;j++) // в него элементы массива p
q[j]=Z[j];
delete[] Z; // Уничтожаем старый массив
Z=q; // Z теперь указывает на новый массив
}
Z[i]=temp;
}
delete[] Z;// Освобождаем память
}
// Код программы при использовании контейнера vector
#include <vector>
vector<int>v;
int num;
for(int i=0;;i++)
{ cout<<i+1<<"-йэлемент ";
cin>>num;
if(num==0)
break;
v.push_back(num);//Добавить numв конец вектора
}
Преимущества второго подхода настолько очевидны, что в комментариях не нуждаются. Все процессы, связанные с изменением размеров массива и перераспределением памяти, скрыты от пользователя и выполняются автоматически.
Стандартная библиотека шаблонов (Standard Template Library) – это существенная часть стандартной библиотеки С++. Использование STL дает возможность создавать более надежные, более переносимые и более универсальные программы, а также сократить расходы на их разработку.
Ядро стандартной библиотеки шаблонов включает три основных элемента:
контейнеры,
алгоритмы,
итераторы.
Они работают совместно один с другим, предоставляя тем самым готовые решения различных задач программирования.
Контейнеры – это объекты, которые могут хранить множество элементов – объектов некоторого типа.
Каждый раз, когда в программе возникает необходимость оперировать множеством элементов, в дело вступают контейнеры. В языке C (не в C++) существовал только один встроенный тип контейнера: массив. В STL имеется несколько различных типов контейнеров. Простейшим и самым распространенным контейнером является vector.
Алгоритмы обрабатывают содержимое контейнеров. Их возмож-ности включают средства инициализации, сортировки, поиска и преобразования содержимого контейнеров.
Итераторы – это объекты, которые в той или иной степени действуют подобно указателям. Итераторы обеспечивают интерфейс между контейнерами и алгоритмами. Они позволяют циклически опрашивать содержимое контейнера практически так же, как это делается с помощью указателя при циклическом опросе элементов массива. Итераторы обрабатываются аналогично указателям.
Последовательными называвются контейнеры, в которых каждый элемент занимает определенную позицию.
Вектор – единственный в STL обратносовместимый с чистым C-контейнером. Это означает, что вектор, по сути, дела является обычным динамическим массивом, но с рядом дополнительных функций.
Для доступа к его элементам можно использовать стандартное обозначение индексации массивов. Объектами вектора могут быть как базовые типы переменных (int, float, charи т. д.), так и строки.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.