Задание: В контейнере типа vector хранятся елки(поля: высота, цена).Необходимо разработать программу для : 1. Поиск минимального значения(по высоте, цене) 2. Поиск максимального значения 3. Сортировка данных по убыванию 4. Сортировка данных по возрастанию 5. Увеличение значений в контейнере на заданную константу 6. Уменьшение значений в контейнере на заданную константу 7. Удаление элементов из контейнера равных искомому значению
class tree
{
private:
float height;
float price;
public:
tree(float height, float price) : height(height), price(price){}
float getHeight()
{
return height;
}
float getPrice()
{
return price;
}
};
int main()
{
vector<tree> _tree;
vector<tree>::iterator it;
it = _tree.begin();
float height;
float price;
while (true)
{
system("cls");
cout << "MENU" << endl << endl;
cout << "1 - add tree" << endl;
cout << "2 - find the minimum value" << endl;
cout << "3 - find the maximum value" << endl;
cout << "4 - sort data in descending order" << endl;
cout << "5 - sort data in ascending order" << endl;
cout << "6 - increase the values in the container by a given constant" << endl;
cout << "7 - decrease values in the container by a given constant" << endl;
cout << "8 - removing items from the container equal to the desired value" << endl;
cout << "9 - exit" << endl << endl;
cout << "Enter: ";
int menu;
cin >> menu;
switch (menu)
{
case 1:
{
system("cls");
cout << "Enter height: ";
cin >> height;
cout << "Enter price: ";
cin >> price;
tree t(height,price);
_tree.push_back(t);
Sleep(500 * 1);
break;
}
case 2:
{
system("cls");
Sleep(1000 * 1);
break;
}
}
}
system("cls");
return 0;
}
Как мне через vector достучаться к полям класса, что бы с ними работать ?
Вот вам некоторые подсказки:
class tree
{
private:
float height;
float price;
public:
tree(float height, float price) : height(height), price(price){}
float getHeight() const
{
return height;
}
float getPrice() const
{
return price;
}
void setPrice(float newPrice)
{
price = newPrice;
}
};
int main()
{
vector<tree> trees;
// Итератор на елку с наименьшей ценой
auto min_price = min_element(trees.begin(),trees.end(),
[](const tree& a, const tree& b)
{
return a.getPrice() < b.getPrice();
});
// Сортировка елок по высоте
sort(trees.begin(),trees.end(),
[](const tree& a, const tree& b)
{
return a.getHeight() < b.getHeight();
});
// Увеличение цен в контейнере в 2 раза
for_each(trees.begin(),trees.end(),[](tree&a) { a.setPrice(a.getPrice()*2); });
// или
for(auto& t: trees) t.setPrice(t.getPrice()*2);
}
Из советов: не пренебрегайте const
! и не используйте подчерк первым символом - такие имена зарезервированы С++ для внутренних целей (на самом деле правила более точные, чем просто начинающиеся с подчерка, но проще приобрести привычку просто не использовать первым символом подчерк вообще).
Как вариант работы с vector'м объектов какого-либо класса (доступ к методам элемента/объекта vector'а):
#include <iostream>
#include <vector>
class Tree
{
private:
float mHeight;
float mPrice;
public:
Tree(float height, float price)
: mHeight(height), mPrice(price){}
float getHeight()
{
return mHeight;
}
float getPrice()
{
return mPrice;
}
};
int main(int argc, const char * argv[]) {
std::vector<Tree> vecTree = {
Tree(1.55, 1450.0),
Tree(1.65, 1670.0),
Tree(1.07, 989.9)
};
std::cout << "All vector of trees: " << std::endl;
for(auto iter=vecTree.begin(); iter!=vecTree.end(); ++iter) {
std::cout << "Tree( " << iter->getHeight() << ", " << iter->getPrice() << " );" << std::endl;
}
return 0;
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Есть два класса с одинаковыми именами, которые находятся в разных файлах ( но с одинаковыми названиями ) в разных папкахКлассы обёрнуты в разные...