Чтение онлайн

на главную - закладки

Жанры

Освой самостоятельно С++ за 21 день.

Либерти Джесс

Шрифт:

6. Что представляют собой итераторы?

Это обобщенные указатели. Итератор можно инкрементировать, чтобы он указывал на следующий узел в последовательности. К нему также можно применить операцию разыменования, чтобы возвратить узел, на который он указывает.

7. Что такое объект функции?

Это экземпляр класса, в котором определен перегруженный оператор вызова функции . Объект функции можно также использовать как обычную функцию.

Упражнения 

1.

Создайте шаблон на основе данного класса List:

class List

{

public:

List:head(0),tail(0), tbeCount(0) { }

virtual ~List;

void insert( int value );

void append( int value );

int is_present( int value ) const;

int is_empty const { return head == 0: }

int count const { return theCount; }

private:

class ListCell

{

public:

ListCell(int value, ListCell *cell = ):val(value),next(cell){ }

int val;

ListCell *next;

};

ListCell *head;

ListCell *tail;

int theCount;

};

Вот один из способов выполнения этого шаблона:

template <class Type>

class List

{

public:

List:head(0),tail(0),theCount(0) { }

virtual ~List;

void insert( Type value );

void append( Type value );

int is_present( Type value ) const;

int is_empty const { return head == 0; }

int count const { return theCount; }

private:

class ListCell

{

public:

ListCell(Type value, ListCell *cell = O):val(value),next(cell) { }

Type val;

ListCell *next;

};

ListCell *head;

ListCell *tail;

int theCount;

};

2. Напишите выполнение обычной (не шаблонной) версии класса List.

void List::insert(int value)

{

ListCell *pt = new ListCell( value, head );

assert (pt ! = 0);

// эта строка добавляется для обработки хвостового узла

if ( head -= 0 ) tail = pt,

head = pt;

theCount++;

}

void List::append( int value )

{

ListCell *pt = new ListCell( value );

if ( head — 0 )

head = pt;

else

tail->next = pt:

tail = pt;

theCount++;

}

int List::is_present( int value ) const

{

if ( head == 0 )

return 0;

if ( head->val — value || tail->val == value )

return 1;

ListCell *pt = head->next;

for (; pt != tail; pt = pt->next)

if ( pt->val == value )

return 1;

return 0;

}

3.

Напишите шаблонный вариант выполнения.

template <class Type>

List<Type>::~List

{

ListCell *pt = head;

while ( pt )

{

ListCell *tmp = pt;

pt = pt->next;

delete tmp;

}

head = tail = 0;

}

template <class Type>

void List<Type>::insert(Type value)

{

ListCell *pt = new ListCell( value, head );

assert (pt ! = 0);

// эта строка добавляется для обработки хвостового узла

if ( head == 0 )

tail = pt;

head = pt;

theCount++;

}

template <class Type>

void List<Type>::append( Type value )

{

ListCell *pt = new ListCell( value );

if ( head == 0 )

head = pt;

else

tail->next = pt;

tail = pt;

theCount++;

}

template <class Type>

int List<Type>::is_present( Type value ) const

{

if ( head == 0 )

return 0;

if ( head->val == value || tail->val == value )

return 1;

ListCell *pt = head->next;

for (; pt != tail; pt = pt->next)

if ( pt->val — value )

return 1;

return 0;

}

4. Объявите три списка объектов: типа Strings, типа Cat и типа int.

List<String> string_list;

List<Cat> Cat_List;

List<int> int_List;

5. Жучки: что неправильно в приведенном ниже программном коде? (Предположите, что определяется шаблон класса List, а Cat — это класс, определенный выше в данной книге.)

List<Cat> Cat_List;

Cat Felix;

CatList.append( Felix );

cout << "Felix is " << ( Cat_List.is_present( Felix ) ) ? "" : "not " << "present\n";

ПОДСКАЗКА (поскольку задание не из самых легких): подумайте, чем тип Cat отличается от типа int.

В классе Cat не определен оператор operator==. Все операции, в которых сравниваются значения членов класса iist, таких как is_present, будут вызывать ошибку компиляции. Для уменьшения вероятности возникновения таких ошибок перед объявлением шаблона поместите обширный комментарий, в котором должно быть указано, какие операторы следует определить в классе для успешного выполнения всех его методов.

Поделиться:
Популярные книги

Законы Рода. Том 10

Flow Ascold
10. Граф Берестьев
Фантастика:
юмористическая фантастика
аниме
фэнтези
5.00
рейтинг книги
Законы Рода. Том 10

Черный Маг Императора 5

Герда Александр
5. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Черный Маг Императора 5

Часовая битва

Щерба Наталья Васильевна
6. Часодеи
Детские:
детская фантастика
9.38
рейтинг книги
Часовая битва

Боги, пиво и дурак. Том 4

Горина Юлия Николаевна
4. Боги, пиво и дурак
Фантастика:
фэнтези
героическая фантастика
попаданцы
5.00
рейтинг книги
Боги, пиво и дурак. Том 4

Госпожа Доктор

Каплунова Александра
Фантастика:
попаданцы
фэнтези
5.00
рейтинг книги
Госпожа Доктор

Младший сын князя

Ткачев Андрей Сергеевич
1. Аналитик
Фантастика:
фэнтези
городское фэнтези
аниме
5.00
рейтинг книги
Младший сын князя

Я снова граф. Книга XI

Дрейк Сириус
11. Дорогой барон!
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Я снова граф. Книга XI

Гимназистка. Клановые игры

Вонсович Бронислава Антоновна
1. Ильинск
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Гимназистка. Клановые игры

Совок

Агарев Вадим
1. Совок
Фантастика:
фэнтези
детективная фантастика
попаданцы
8.13
рейтинг книги
Совок

В семье не без подвоха

Жукова Юлия Борисовна
3. Замуж с осложнениями
Фантастика:
социально-философская фантастика
космическая фантастика
юмористическое фэнтези
9.36
рейтинг книги
В семье не без подвоха

Бастард Императора. Том 5

Орлов Андрей Юрьевич
5. Бастард Императора
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бастард Императора. Том 5

Замуж второй раз, или Ещё посмотрим, кто из нас попал!

Вудворт Франциска
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Замуж второй раз, или Ещё посмотрим, кто из нас попал!

Бастард Императора. Том 8

Орлов Андрей Юрьевич
8. Бастард Императора
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бастард Императора. Том 8

Тактик

Земляной Андрей Борисович
2. Офицер
Фантастика:
альтернативная история
7.70
рейтинг книги
Тактик