Программирование >>  Программирование на языке c++ 

1 ... 82 83 84 [ 85 ] 86 87 88 ... 159


объектов типа 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 позволяет

выполнить повторные итерации



1 ... 82 83 84 [ 85 ] 86 87 88 ... 159

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика