Ответы пользователя по тегу Программирование
  • Как постороить дерево как на картинке?

    @Alexander1705
    Каждая вершина, это структура, которая содержит данные, указатель на родителя и список указателей на дочерние элементы.

    struct item {
        int value;
        item* parent;
        vector<item*> children;
    
        item(int v, item* p = nullptr) : value(v), parent(p) {}
        
        void addChild(int value) {
            children.push_back(new item(value, this));
        }
    
        ~item() {
            for(auto child : children)
                delete *child;
        }
    }


    Естественно, value может быть любого другого типа.
    Ответ написан
    1 комментарий
  • Как выбрать какую функцию вызвать на этапе выполнения программы?

    @Alexander1705
    Так как имя функции по сути является указателем, то этот указатель можно передать, как аргумент другой функции.

    Указатель на функцию можно использовать следующим образом:
    // Некоторая функция
    float func(float x1, float x2);
    
    // Указатель на функцию: возвращаемый_тип (* имя_указателя)(типы_аргументов)
    float (*func_pointer)(float, float);
    
    // Указателю можно присвоить только функции имеющие такую же 
    // сигнатуру (возвращаемый тип и типы аргументов)
    func_pointer = func;
    
    // Указатель на функцию может быть аргументом
    double findMinimum(x1, x2, float (*func_arg)(float, float)) {
        // Вызвать функцию через указатель можно также как и обычную функцию
        // потому, что имя функции тоже является указателем
        float x = func_arg(x1, x2);
    }
    
    // Чтоб передать указатель на функцию, нужно просто написать имя функции без скобок
    cout << findMinimum(1, 2, func) << '\n';
    Ответ написан
    Комментировать