Программирование >>  Дополнительные возможности наследования 

1 ... 203 204 205 [ 206 ] 207 208 209 ... 265


63: itsName = rhs.GetNameO;

64; itsAge = rhs.GetAgeO;

65; return *this;

66; } 67;

68; ostream& operator (ostream& os, const Students rhs) 69; {

70; OS rhs.GetNameO << is rhs,GetAgeO years old ;

71; return os;

72; } 73;

74; template<class T, class A>

75; void ShowMap(const map<T, A>& v); отображает свойства карты 76;

77; typedef map<string, Student> SchoolClass; 78;

79; int mainO 80; {

81; Student Harry( Harry , 18);

82; Student Sally( Sally , 15);

83; Student Bill( Bill , 17);

84; Student Peter( Peter , 16);

86; SchoolClassMathClass;

87; MathClass[Harry.GetName()] = Harry;

88; MathClass[Sally,GetName()] = Sally;

89; MathClass[Bill,GetName()] = Bill;

90; MathClass[Peter,GetName()] = Peter;

92; cout MathClass;\ n ;

93; ShowMap(MathClass);

95; cout We know that MathClass[ Bill ],GetName()

96; is MathClass[ Bill ],GetAgeO years old\ n ;

98; return 0;

99; }

100;

101;

102; Отображает свойства карты 103;

104; template<class Т, class A>

105; void ShowMap(const map<T, A>& v)

106; {

107; for (map<T, A>;;const iterator ci = v,begin();

108; ci != v.endO; ++ci)

109; cout ci->first ; ci->second \ n ;

110;

111; cout endl;

112; }



MathClass;

Bill; Bill is 17 years old Harry: Harry Is 18 years old Peter: Peter is 16 years old Sally: Sally is 15 years old

We know that Bill is 17 years old

В строке 3 в программу добавляется файл заголовка <тар>, поскольку будет использоваться стандартный класс-контейнер тар. Для отображения элементов карты определяется шаблонная функция ShowMap. В строке 77 класс SchoolClass определяется как карта элементов, каждый из которых состоит из пары (ключ, значение). Первая составляющая пары - это значение ключа. В нашем классе SchoolClass имена студентов используются в качестве ключевых значений, которые имеют тип string. Ключевое значение элемента в контейнере карты должно быть уникальным, т.е. никакие два элемента не могут иметь одно и то же ключевое значение. Вторая составляющая пары - фактический объект, в данном примере это объект класса student. Парный тип данных реализован в библиотеке STL как структура (тип данных struct), состоящая из двух членов, а именно: first и second. Эти члены можно использовать для получения доступа к ключу и значению узла.

Пропустим пока функцию main() и рассмотрим функцию ShowMap, которая открывает доступ к объектам карты с помошью константного итератора. Выражение ci->first (строка 109) указывает на ключ (имя студента), а выражение ci->second - на объект класса Student.

В строках 81-84 создаются четыре объекта класса Student. Класс MathClass определяется как экземпляр класса SchoolClass (строка 86), а в строках 87-90 уже имеющиеся четыре студента добавляются в класс MathClass:

map object[key value] = object value;

Для добавления в карту пары ключ-значение можно было бы также использовать функции push back() или insertO (за более подробной информацией обратитесь к документации, прилагаемой к вашему компилятору).

После добавления к карте всех объектоа класса Student можно обращаться к любому из них, используя их ключевые значения. В строках 95 и 96 для считывания записи, относящейся к студенту Биллу (объекту Bill), используется выражение MathClass[ Bill ].

Другие асспциатианые контейнеры

Класс-контейнер мультикарты - это класс карты, не ограниченный уникальностью ключей. Это значит, что одно и то же ключевое значение могут иметь не один, а несколько элементов.

Класс-контейнер множества также подобен классу карты. Единственное отличие в том, что его элементы представляют собой не пары ключ-значение, а только ключи.

Наконец, класс-контейнер мультимножества - это класс множества, который позволяет иметь несколько ключевых значений.



Классы алгоритмов

Контейнер - это удобное место для хранения последовательности элементов. Все стандартные контейнеры содержат методы управления контейнерами и их элементами. Однако манипулирование собственными данными в программах с помощью этих методов может потребовать от профаммиста написания обширного программного кода, что чревато появлением ошибок. Но поскольку большинство операций, выполняемых над данными, рутинны и повторяются от профаммы к профамме, то подборка универсальных алгоритмов может существенно облегчить написание программ обработки данных контейнера. Стандартная библиотека предоставляет около 60 стандартных алгоритмов, которые выполняют большинство базовых и часто используемых операций, характерных для контейнеров.

Стандартные алгоритмы определены в файле <algorithm> в пространстве имен std.

Чтобы понять, как работают стандартные алгоритмы, необходимо познакомиться с понятием объектов функций. Объект функции - это экземпляр класса, в котором определен перефуженный оператор вызова функции(). В результате этот класс может вызываться как функция. Использование объекта функции показано в листинге 19.11.

flucmuHz 19.11. оеъекш функции

#include <iostreain>

using namespace std;

template<class T>

class Print {

public:

7; 8:

void operator( )(const T8. t) {

cout t

: int

main()

Print<int> DoPrint;

for (int i = 0; i < 5; ++i)

DoPrint(i);

return 0;

0 12 3 4

В Сфоках 4-11 определяется шаблонный класс Print. Перефуженный в сфо-ках 7-10 оператор вызова функции Опринимает объект и перенаправляет его в стандартный поток вывода. В сфОке 15 определяется объект DoPrint как экземпляр класса Print. После этого, чтобы вывести на печать любые целочисленные значения, объект DoPrint можно использовать подобно обычной функции, как показано в сфОке 17.



1 ... 203 204 205 [ 206 ] 207 208 209 ... 265

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