|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Вектор, содержащий объекты классаВ предыдущих примерах вектор содержал объекты встроенных типов, однако класс vector обладает более широкими возможностями. Вектор может состоять из объектов любого типа, включая объекты классов, определенных программистом. Рассмотрим пример, в котором вектор хранит данные о температуре воздуха, измеренной в течение недели. Обратите внимание на то, что класс DailyTemp имеет конструктор по умолчанию, а также перегруженные версии операторов "<" и "==". Помните, что в зависимости от конкретной реализации библиотеки STL перегрузка операторов сравнения может быть необязательной.
// Вектор, содержащий объекты класса. // Доступ к элементам вектора <: помощью итератора. #include"stdafx.h" #include <iostream> #include <vector> #include <windows.h> #include <cctype> using namespace std; // Вектор, содержащий объекты класса. class DailyTemp { int temp; public: DailyTemp() { temp = 0; } //Первый конструктор, DailyTemp(int x) { temp = x; } //Второй конструктор DailyTemp &operator=(int x) {//фунция перегрузки оператора = temp = x; return *this; //это значит, что если встретится //оператор = то нужно выполнить тело данной функции } double get_temp() { return temp; } // функция, возвращает значение переменной temp }; bool operator<(DailyTemp a, DailyTemp b) {//перегрузка оператора < return a.get_temp() < b.get_temp(); } bool operator==(DailyTemp a, DailyTemp b){//перегрузка оператора == return a.get_temp() == b.get_temp(); } int main (){ vector<DailyTemp> v; unsigned int i; //запись в вектор случайных чисел for(i=0; i<7; i++) v.push_back(DailyTemp(60 + rand()%30)); SetConsoleOutputCP(1251); cout << "Температура по Фаренгейту:\n"; //Вывод содержимого вектора for(i=0; i<v.size(); i++) cout << v[i].get_temp() << " "; cout << endl; // Преобразование шкалы Фаренгейта в шкалу Цельсия. for(i=0; i<v.size(); i++) v[i] = (v[i].get_temp()-32) * 5/9; cout << "Температура в градусах:\n"; for(i=0; i<v.size(); i++) cout << v[i].get_temp() <<" "; system("pause"); return 0; }
Ниже приводится примерный вывод этот программы.
Векторам присуща большая мощь, безопасность и гибкость, но, к сожалению, они менее эффективны, чем обычные массивы. Хотя, некоторых случаях преимущества класса vector перевешивают его недостатки.
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.) |