чямывп. 9 лаба. Контейнеры vector, map и set. Итераторы. Алгоритмы
Скачать 416.03 Kb.
|
МИНОБРНАУКИ РОССИИ САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ «ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА) Кафедра ФРТ ОТЧЕТ по лабораторной работе № 9 по дисциплине «Информатика» Тема: Контейнеры vector, map и set. Итераторы. Алгоритмы. Студент гр. 1106: Иванчин А.В Преподаватель: Чиркунова А. А. Санкт-Петербург 2022 Цель работы Знакомство работы с контейнерами: vector, map, set. Теоретические сведения • Контейнеры: o vector – это динамический массив, элементы которого размещаются последовательно в одной области памяти Инициализация: vector<тип данных> название переменной Доступ к элементам: mass[index] – доступ по индексу, без проверки диапазона mass.at(index) – доступ по индексу, с проверкой диапазона mass.front() – первый элемент mass.back() – последний элемент Итераторы mass.begin() – возвращает итератор на первый элемент mass.end() – возвращает итератор на последний элемент mass.rbegin() – возвращает итератор на последний элемент (для обратных алгоритмов) mass.rend() – возвращает итератор на первый элемент (для обратных алгоритмов) Размеры mass.empty() – возвращает true, если вектор пуст mass.size() – возвращает количество элементов mass.max_size() – возвращает максимально возможное количество элементов mass.reverse(n) – устанавливает минимальное количество элементов mass.capacity() – возвращает количество элементов, которое может вмещать до выделения большего количества памяти Модификаторы mass.clear() – удаление всех элементов mass.insert() – вставка элемента mass.erase() – удаление конкретного элемента mass.push_back() – добавление элемента в конец вектора mass.pop_back() – удаление последнего элемента mass.resize() – изменяет размер вектора mass.swap() – обмен содержимого двух векторов mass.count() – возвращает количество вхождений конкретного значения Операторы [] - индексация = - присвоение ==,!=,<,>,<=,>= - сравнения o map – это динамический ассоциативный массив Инициализация: map<тип данных1, тип данных> название переменной Итераторы s.begin() – возвращает итератор на первый элемент s.end() – возвращает итератор на последний элемент s.rbegin() – возвращает итератор на последний элемент (для обратных алгоритмов) s.rend() – возвращает итератор на первый элемент (для обратных алгоритмов) Размеры s.empty() – возвращает true, если map пуст s.size() – возвращает количество элементов s.max_size() – возвращает максимально возможное количество элементов Модификаторы s.clear() – удаление всех элементов s.insert() – вставка элемента s.erase() – удаление конкретного элемента s.swap() – обмен содержимого двух контейнеров s.count() – возвращает количество вхождений конкретного значения s.find() – нахождение элемента в контейнере s.lower_bound(a) – первый элемент, меньше a s.upper_bound(a) – первый элемент, больше a s.equal_range(a) – возвращает набор элементов для ключа a s.key_comp() – сортировка по ключу s. value_comp() – сортировка по значению o set – множество, динамический отсортированный массив Инициализация: set<тип данных> название переменной Итераторы mass.begin() – возвращает итератор на первый элемент mass.end() – возвращает итератор на последний элемент mass.rbegin() – возвращает итератор на последний элемент (для обратных алгоритмов) mass.rend() – возвращает итератор на первый элемент (для обратных алгоритмов) Размеры mass.empty() – возвращает true, если set пуст mass.size() – возвращает количество элементов mass.max_size() – возвращает максимально возможное количество элементов Модификаторы mass.clear() – удаление всех элементов mass.insert() – вставка элемента mass.emplace() – вставка элемента mass.erase() – удаление конкретного элемента mass.swap() – обмен содержимого двух векторов mass.count() – возвращает количество вхождений конкретного значения s.find() – нахождение элемента в контейнере s.lower_bound(a) – первый элемент, меньше a s.upper_bound(a) – первый элемент, больше a s.equal_range(a) – возвращает набор элементов для ключа a Операторы = - присвоение ==,!=,<,>,<=,>= - сравнения • Алгоритмы – библиотека (сортировки, поиски и т.д.) • Итератор – тип данных iterator, обеспечивающий доступ к элементам в контейнерах. Коды модулей С++ Упражнение 1. #include #include using namespace std; int main() { setlocale( LC_ALL , "ru" ); vector < int > vector1; vector < int > vector2; int P, n, sr = 0, sred, K = 0; cout << "Введите количество дней: " ; cin >> P; for ( int i = 0; i < P; i++) { cin >> n; vector1.push_back(n); } for ( int i = 0; i < P; i++) { sr += vector1 [ i ] ; } sred = sr / P; for ( int i = 0; i < P; i++) { if (vector1 [ i ] > sred) { K++; vector2.push_back(i); }; } for ( int i = 0; i < K; i++) { cout << K << endl; cout << vector2 [ i ] << endl; } return 0; } Упражнение 2. #include #include #include using namespace std; int main() { vector < double > temp; double N, element; double sum = 0; cin >> N; for ( int i = 0; i < N; i++) { cin >> element; temp.push_back(element); } auto min_max = min_element(temp.begin(), temp.end()); cout << * min_max << ' ' ; min_max = max_element(temp.begin(), temp.end()); cout << * min_max << endl; sort(temp.rbegin(), temp.rend()); for ( auto q : temp) { cout << q << ' ' ; sum += q; } cout << endl << count(temp.begin(), temp.end(), (sum / temp.size())) << endl; for ( auto q : temp) { if (q == (sum / temp.size())) cout << 0 << ' ' ; else cout << q << ' ' ; } Упражнение 3. #include #include } void WEEK( map < string , vector < int >> & a ) { a .key_comp(); if ( a .size() == 0) cout << "No temp of the week" << endl; for ( auto it = a .begin(); it != a .end(); ++ it) { cout << ( * it).first << ": " ; for ( int i = 0; i < a [ ( * it).first ] .size(); i++) cout << ( * it).second.at(i) << ' ' ; cout << endl; } } void MEAN( map < string , vector < int >> & a ) { a .key_comp(); double fullsum = 0; int fullsumC = 0; double sum = 0; for ( auto it = a .begin(); it != a .end(); ++ it) { for ( int i = 0; i < a [ ( * it).first ] .size(); i++) fullsum += ( * it).second.at(i); fullsumC += ( * it).second.size(); } fullsum /= fullsumC; for ( auto it = a .begin(); it != a .end(); ++ it) { for ( int i = 0; i < a [ ( * it).first ] .size(); i++) sum += ( * it).second.at(i); sum /= ( * it).second.size(); if (fullsum < sum) cout << ( * it).first << ' ' ; sum = 0; } } void DEL_DAY( map < string , vector < int >> & a ) { string s; cin >> s; if ( a .find(s) != a .end()) { a .erase(s); cout << "Delete " << s << endl; } else cout << "No day of week" << endl; } int main() { int N; string command; map < string , vector < int >> temp; cin >> N; for ( int i = 0; i < N; i++) { cin >> command; if (command == "NEW_TEMP" ) NEW_TEMP(temp); else if (command == "DEL_TEMP" ) DEL_TEMP(temp); else if (command == "DAY_OF_WEEK" ) DAY_OF_WEEK(temp); else if (command == "WEEK" ) WEEK(temp); else if (command == "MEAN" ) MEAN(temp); else if (command == "DEL_DAY" ) DEL_DAY(temp); else cout << "error " << endl; } return 0; } Упражнение 4. #include #include void WEEK( map < string , set < int >>& a ) { a .key_comp(); if ( a .size() == 0) cout << "No temp of the week" << endl; for ( auto it = a .begin(); it != a .end(); ++ it) { cout << ( * it).first << ": " ; for ( auto i = a [ ( * it).first ] .begin(); i != a [ ( * it).first ] .end(); i ++ ) cout << * i << ' ' ; cout << endl; } } void MEAN( map < string , set < int >>& a ) { a .key_comp(); double fullsum = 0; int fullsumC = 0; double sum = 0; for ( auto it = a .begin(); it != a .end(); ++ it) { for ( auto i = a [ ( * it).first ] .begin(); i != a [ ( * it).first ] .end(); i ++ ) fullsum += * i; fullsumC += ( * it).second.size(); } fullsum /= fullsumC; for ( auto it = a .begin(); it != a .end(); ++ it) { for ( auto i = a [ ( * it).first ] .begin(); i != a [ ( * it).first ] .end(); i ++ ) sum += * i; sum /= ( * it).second.size(); if (fullsum < sum) cout << ( * it).first << ' ' ; sum = 0; } } void DEL_DAY( map < string , set < int >>& a ) { string s; cin >> s; if ( a .find(s) != a .end()) { a .erase(s); cout << "Delete " << s << endl; } else cout << "No day of week" << endl; } int main() { int N; string command; map < string , set < int >> temp; cin >> N; for ( int i = 0; i < N; i++) { cin >> command; if (command == "NEW_TEMP" ) NEW_TEMP(temp); else if (command == "DEL_TEMP" ) DEL_TEMP(temp); else if (command == "DAY_OF_WEEK" ) DAY_OF_WEEK(temp); else if (command == "WEEK" ) WEEK(temp); else if (command == "MEAN" ) MEAN(temp); else if (command == "DEL_DAY" ) DEL_DAY(temp); else cout << "ERROR! " << endl; } return 0; } Скриншоты работы программ Упражнение 1, приведены данные из примера Упражнение 2, данные из примера к упражнению 1 Упражнение 3, данные из примера Упражнение 4, данные из примера к упражнению 3 Выводы по проделанной работе Были проведено знакомство с контейнерами: vector, map, set. |