454_____________________Часть III. Современное программирование на C++
то А!==В. За исключением этого ограничения, множества и мультимножества ничем не отличаются. Для класса STUDENT наиболее обычные классы-множества определяются так:
typedef TSetAsVector<STUDENT> STUDENT_SET;
// Прямой контейнер
typedef TISetAsVector<STUDENT> STUDENT_POINTER_SET;
// Косвенный контейнер
Конструкторы и функции-члены устроены так же, как аналогичные им для контейнеров типа мультимножество, за исключением функции-члена Add. Если в Add передан объект Айв множестве уже есть объект В, для которого А=В, функция Add работать не будет.
#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;