454_____________________Часть III. Современное программирование на C++

то А!==В. За исключением этого ограничения, множества и мультимножества ничем не отличаются. Для класса STUDENT наиболее обычные классы-множества определяются так:

typedef TSetAsVector<STUDENT> STUDENT_SET;

// Прямой контейнер

typedef TISetAsVector<STUDENT> STUDENT_POINTER_SET;

// Косвенный контейнер

Конструкторы и функции-члены устроены так же, как аналогичные им для контейнеров типа мультимножество, за исключением функции-члена Add. Если в Add передан объект Айв множестве уже есть объект В, для которого А=В, функция Add работать не будет.

h04541.jpg

#include <iostream-h> ftinclude <iomanip.h>

#include <classlib\sets.h>

#include "studentl.h"

// Прямое множество. typedef TSetAsVector<STUDENT> STUDENT_SET;

// Итератор BIDS typedef TSetAsVectorIterator<STUDENT> STUDENT_SET_ITERATOR;

// Размещение элементов в контейнере void WriteStudents(STUDENT_SET&) ;

int main() (

STUDENT_SET students(10) ;

students.Add(STUDENT("JohnNewton", 1.0));

students.Add(STUDENT("DeanBrown", 2.0));

students.Add(STUDENT("CarlBishop", 3.0));

students.Add(STUDENT("GaryCook", 4.0));

Стеки

В противоположность очереди, стек. (stack) основывается на принципе LIFO (Last In, First Out): последним пришел — первым вышел. Элементы помещаются в стек с верхушки и оттуда же выталкиваются. Обычно для стеков используются конструкторы:

typedef TStackAsVector<STUDENT> STUDENT_VSTACK;

typedef TIStackAsVector<STUDENT> STUDENT_POINTER_VSTACK;

typedef TStackAsList<STUDENT> STUDENT_LSTACK;

typedef TIStackAsList<STUDENT> STUDENT POINTER LSTACK;