Программирование. Принципы и практика использования C++ Исправленное издание, стр. 152
vector<string> month_input_tbl; // month_input_tbl[0]=="jan"void init_input_tbl(vector<string>& tbl)// инициализирует вектор входных представлений{ tbl.push_back("jan"); tbl.push_back("feb"); tbl.push_back("mar"); tbl.push_back("apr"); tbl.push_back("may"); tbl.push_back("jun"); tbl.push_back("jul"); tbl.push_back("aug"); tbl.push_back("sep"); tbl.push_back("oct"); tbl.push_back("nov"); tbl.push_back("dec");}int month_to_int(string s)// Является ли строка s названием месяца? Если да, то возвращаем ее// индекс из диапазона [0:11], в противном случае возвращаем –1{ for (int i=0; i<12; ++i) if (month_input_tbl[i]==s) return i; return –1;}На всякий случай заметим, что стандартная библиотека С++ предусматривает более простой способ решения этой задачи. См. тип
map<string,int>Если мы хотим вывести данные, то должны решить обратную задачу. У нас есть представление месяца с помощью чисел
intstringintintstringvector<string> month_print_tbl; // month_print_tbl[0]=="January"void init_print_tbl(vector<string>& tbl)// инициализируем вектор представления для вывода{ tbl.push_back("January"); tbl.push_back("February"); tbl.push_back("March"); tbl.push_back("April"); tbl.push_back("May"); tbl.push_back("June"); tbl.push_back("July"); tbl.push_back("August"); tbl.push_back("September"); tbl.push_back("October"); tbl.push_back("November"); tbl.push_back("December");}string int_to_month(int i)// месяцы [0:11]{ if (i<0 || 12<=i) error("Неправильный индекс месяца."); return month_print_tbl[i];}Для того чтобы этот подход работал, необходимо где-то вызвать функции инициализации, такие как указаны в начале функции main().
// первая инициализация таблиц представлений:init_print_tbl(month_print_tbl);init_input_tbl(month_input_tbl);
Задание
1. Разработайте программу, работающую с точками (см. раздел 10.4). Начните с определения типа данных
Pointxy2. Используя код и обсуждение из раздела 10.4, предложите пользователю ввести семь пар (x,y). После ввода данных запишите их в вектор объектов класса
Pointoriginal_points3. Выведите на печать данные из объекта
original_points4. Откройте поток
ofstreammydata.txt.txt5. Закройте поток
ofstreamifstreammydata.txtmydata.txtprocessed_points6. Выведите на печать данные из обоих векторов.
7. Сравните эти два вектора и выведите на печать сообщение Что-то не так
!