Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лафоре Р. - Объектно-ориентированное программир...doc
Скачиваний:
153
Добавлен:
01.04.2025
Размер:
41 Мб
Скачать
☆

}

}while(choice != 'x');

return 0;

} // конец main()

Глава 15 Ответы на вопросы

  1. а, б, г.

  2. Вектор, список, очередь с двусторонним доступом.

  3. Множество, отображение.

  4. а.

  5. Истинно.

  6. в.

  7. Ложно.

  8. Итераторов.

  9. Функциональный объект.

  10. в.

  11. Ложно; он просто возвращает значение.

  12. 3, 11.

  13. Дублирующие.

  14. б, в.

  15. Указывается на.

  16. Ложно.

  17. Двунаправленный.

  18. *iter++

  19. г.

  20. в.

  21. Истинно.

  22. Итераторов.

  23. Это строка, используемая для разделения выводимых значений.

  24. б.

  25. Упорядочивания элементов.

  26. Истинно.

  27. Пары (или ассоциации).

  28. Ложно.

  29. а, г.

  30. Конструкторов.

Решения упражнений

1. Верное решение:

// ex15_1.cpp

// тип float хранится в массиве, сортируется функцией sort()

#include <iostream>

#include <algorithm>

using namespace std;

int main()

{

int j = 0, k;

char ch;

float fpn, farr[100];

do {

cout << "Введите число в формате с плавающей запятой:";

cin >> fpn;

farr[j++] = fpn;

cout << "Продолжать('y' или 'n'):";

cin >> ch;

} while(ch == 'y');

sort(farr, farr + j);

for(k = 0; k < j; k++)

cout << farr[k] << ", ";

cout << endl;

return 0;

}

2. Верное решение:

// ex15_2.cpp

// использование вектора для работы со

// строками, push_back() и[]

#include <iostream>

#include <string>

#pragma warning (disable:4786) // для Microsoft

#include <vector>

#include <algorithm>

using namespace std;

int main()

{

vector<string>vectStrings;

string word;

char ch;

do {

cout << "Введите слово:";

cin >> word;

vectStrings.push_back(word);

cout << "Продолжать ('y' или 'n'):";

cin >> ch;

} while(ch == 'y');

sort(vectStrings.begin(), vectStrings.end());

for(int k = 0; k < vectStrings.size(); k++)

cout << vectStrings[k] << endl;

return 0;

}

3. Верное решение: // ex15_3.cpp

// самодельный алгоритм reverse() переворачивает список

#include <iostream>

#include <list>

using namespace std;

int main()

{

int j;

list<int>theList;

list<int>::iterator iter1;

list<int>::iterator iter2;

for(j = 2; j < 16; j += 2) // заполнить список: 2, 4, 6,...

theList.push_back(j);

cout << "До переворачивания:"; // вывести список

for(iter1 = theList.begin(); iter1 != theList.end(); iter1++)

cout << *iter1 << " ";

iter1 = theList.begin(); // установить на первый эл-т

iter2 = theList.end(); // установить после последнего

--iter2; // перейти на последний

while(iter1 != iter2)

{

swap(*iter1, *iter2); // поменять начало и конец

++iter1; // сдвинуться вперед от начала

if(iter1 == iter2) // если четное число элементов

break;

--iter2; // сдвинуться назад от конца

}

cout << "\nПосле переворачивания:"; // вывести список

for(iter1 = theList.begin(); iter1 != theList.end(); iter1++)

cout << *iter1 << " ";

cout << endl;

return 0;

}

4. Верное решение:

// ex15_4.cpp

// мультимножество автоматически сортирует персон,

// хранящихся по указателям

#include <iostream>

#include <set>

#pragma warning (disable:4786)

#include <string>

using namespace std;

class person

{

private:

string lastName;

string firstName;

long phoneNumber;

public:

person(): // конструктор по умолчанию

lastName("пусто"), firstName("пусто"), phoneNumber(0L)

{ } // конструктор с тремя аргументами

person(string lana, string fina, long pho):

lastName(lana), firstName(fina), phoneNumber(pho)

{ }

friend bool operator<(const person&, const person&);

void display()const // display person 's data

{

cout << endl << lastName << ",\t " << firstName