|
Программирование >> Программирование на языке c++
объектов типа double, 10 - число элементов в контейнере; объекты в контейнере будут отсортированы (так как задан префикс TS) int j; промежуточная переменная for (int i=0; i<10; i++) { cin j; a.Add(j); } добавление объекта в контейнер for (i=0; i<10; i++) cout a[i] вывод значения объектов типа double Если ввести в эту программу десять чисел, то они будут выведены на экран в отсортированном виде (первым будет выведено меньшее число, а последним - большее). В общем виде конструктор для контейнера TSArray As Vector представляется в следующем виде: TSArrayAsVector(int upper,int lower=0,int delta=0); Он строит подмассив с индексами от lower до upper и с параметром delta, где delta - число элементов, которые надо добавить в массив, после чего в нем не будет места для очередного элемента. В примере второй и третий параметры конструктора имели значения, заданные по умолчанию. Рассмотрим следующую строку: TSArrayAsVector<double> а( 10,0,10); Здесь строится массив объектов типа double. В этот массив можно поместить 10 элементов, начиная с нулевого индекса. Как только 10 объектов будут помещены в массив, попытка добавления следующего объекта приведет к автоматическому выделению памяти для 10 новых объектов (так как delta = 10). Это позволяет решать проблему расширения массивов и не требует оценки размера массива с самого начала. Начиная с некоторых небольших размеров, мы можем далее поэтапно увеличивать размер массива. Окончательный размер массива примерно равен числу действительно размещенных в нем объектов. Ниже приводятся примеры, где используются все параметры конструктора для контейнера TSArray As Vector. Второй пример показывает применение итераторов. 9 В, А. Скляров 257 #include <iostream.h> #include <classlib\arrays.h> void main(void) { TSArrayAsVector<double> a(10); int j; for {int i=0; i<a.ArraySize(); i++) { cin j; a.Add(j); } TSArrayAsVectorlterator<double> next(a); здесь объявляется итератор next для массива а j=0; while (next != 0) позволяет выполнять операции с массивом до тех пор, пока не будет достигнут его конец (т. е. next будет равно нулю) { cout a[j++] \f; ++next; } Эта программа работает так же, как и предыдущая. Ее отличием является лишь использование новых конструкций. Третья программа показывает построение массива объектов нового типа (типа А). #include <iostream.h> #include <classlib\arrays.h> class A { объявление класса A (нового типа A) int i; public: void set(int I) { 1=1; } int get(void) { return i; } наш массив должен быть представлен в отсортированном виде, поэтому для нового типа надо определить операции < и ==, которые используются при выполнении сортировки int operator<(const А& а) const { return i < a.i; } int operator==(const A& a) const { return i == a.i; } void main(void) { TSArrayAsVector<A> a(4); A aa[5]; построение массива объектов типа А aa[0].set(56); aa[1].set(22); aa[2].set(125); aa[3].set(12); aa[4].set(58); a.Add(aa[0]); a.Add(aa[1]); a.Add(aa[2]); занесение a.Add(aa[3]); a.Add(aa[4]); объектов в контейнер a intj=0; TSArrayAsVectorlterator<A> next(a); while (next 1= 0) { cout a[j++].get() \f; ++next;} Результат: 12 22 56 58 125 Четвертая программа демонстрирует явное задание в конструкторе контейнера TSArray As Vector всех трех его параметров. #include <iostream.h> #include <classlib\arrays.h> const delta=2; void main(void) { TSArrayAsVector<double> a(10,3,delta); int j; cout a.LowerBoundO << \t a.UpperBoundO endl; Результат: 310 for (int i=a.LowerBound(); i<a.UpperBound(); \+=2) { cin j; a.Add(j); } TSArrayAsVectorlterator<double> next{a); while (next != 0) { cout next.CurrentO \t; функция Current возвращает значение текущего объекта -f-fnext; } cout endl; next.Restart(2,4); функция Restart позволяет выполнить повторные итерации
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |