Работа с vector C++

151
13 февраля 2022, 17:10

Задание: В контейнере типа 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 достучаться к полям класса, что бы с ними работать ?

Answer 1

Вот вам некоторые подсказки:

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! и не используйте подчерк первым символом - такие имена зарезервированы С++ для внутренних целей (на самом деле правила более точные, чем просто начинающиеся с подчерка, но проще приобрести привычку просто не использовать первым символом подчерк вообще).

Answer 2

Как вариант работы с 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;
}
READ ALSO
Почему неверный код работает без ошибок?

Почему неверный код работает без ошибок?

Почему приведенный код работает у меня без ошибок?

150
Конфликт двух классов в разных пространствах имён C++

Конфликт двух классов в разных пространствах имён C++

Есть два класса с одинаковыми именами, которые находятся в разных файлах ( но с одинаковыми названиями ) в разных папкахКлассы обёрнуты в разные...

149
синтаксис в шаблонном классе

синтаксис в шаблонном классе

у нас есть только шаблон Vector<T> те

120