• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak przyporządkować przy inicjowaniu klasy jakąś funkcję?

Object Storage Arubacloud
+1 głos
265 wizyt
pytanie zadane 8 stycznia 2021 w C i C++ przez bartx3 Początkujący (270 p.)

Dla ćwiczenia zaczynam się bawić z drzewami binarnymi. Czy ktoś może wie, jak zrobić, by inicjując drzewo od razu przyporządkowywać mu działanie binarne, a dokładniej funkcję zwracającą wynik takiego działania (choć przyporządkowywanie operatorów też nie byłoby złe)? Przykładowo:

#include <iostream>
#include <vector>

using namespace std;

template <class T>

int binarne (int a, int b)
{
return a+b;
}

class TREE  //pewne rzeczy już mam, choć dopiero rozbudowuję klasę

int main()
{
TREE <int> drzewo // i tutaj chodzi mi o to, by w jakiś sposób jeszcze przyporządkować funkcję binarne do drzewo
}

 

komentarz 8 stycznia 2021 przez bartx3 Początkujący (270 p.)
Ogólnie plan jest taki, że rodzice to są wyniki działania na dzieciach.
komentarz 8 stycznia 2021 przez tangarr Mędrzec (154,860 p.)

Powiedz mi czy dobrze rozumiem, chcesz zbudować drzewo a potem je zmodyfikować w następujący sposób rodzic = funkcja(prawe_dziecko, lewe_dziecko) ?
 

komentarz 8 stycznia 2021 przez bartx3 Początkujący (270 p.)
Dokładnie tak. Najniższy szczebel to dane wejściowe, a reszta powstaje w ten sposób.
komentarz 8 stycznia 2021 przez tangarr Mędrzec (154,860 p.)
Czy wiesz kiedy chcesz wywołać funkcję i wiesz jak ją wywołać aby uzyskać zamierzony efekt?
komentarz 8 stycznia 2021 przez bartx3 Początkujący (270 p.)
Wiem kiedy. Plan na przykładzie liczb 3, 4, 5, 6 i dodawania/powższej funkcji binarne(int a, int b) jest taki. Sprawdzam ilość danych dotychczasowych i ustawia vectora na odpowiednią wielkość (tutaj 7). Potem wpisuje te 4 liczby w 4 ostatnie komórki, tak że mam 0,0,0,3,4,5,6.
Potem dla komórek od numeru 2 do numeru 0 w tejże kolejności na podstawie prostego wzorku na dzieci jestem w stanie wypełnić je wynikami odpowiednich działań, tak że na końcu dostaję vectora  18, 7, 11, 3, 4, 5, 6.

Nie wiem tylko, jak przyporządkowywać jednemu obiektowi TREE daną funkcję. W ten sposób mógłbym robić różne funkcje, a drzewo korzysta z tej, której chcę.

1 odpowiedź

+2 głosów
odpowiedź 8 stycznia 2021 przez tangarr Mędrzec (154,860 p.)
wybrane 8 stycznia 2021 przez bartx3
 
Najlepsza

Musisz zmodyfikować strukturę drzewa tak, aby mogła przechowywać funktor.

Coś w stylu:

#include <functional>

template <class T>
struct Node {
    T value;
    Node<T> *left = nullptr;
    Node<T> *right = nullptr;
};

template <class T>
class Tree {
private:
    std::function<T(const T&, const T&)> func;
    Node<T> *root = nullptr;
public:
    Tree(std::function<T(const T&, const T&)> f) : func(f) {
    }
    
};

int dodaj(int a, int b) {
    return a+b;
}

int main()
{
    Tree<int> tree(dodaj);
    return 0;
}

 

komentarz 8 stycznia 2021 przez bartx3 Początkujący (270 p.)

Dziękuję. Ten zapis z funkcją zdecydowanie się nadaje smiley

Podobne pytania

0 głosów
1 odpowiedź 220 wizyt
0 głosów
1 odpowiedź 718 wizyt
pytanie zadane 2 kwietnia 2019 w C i C++ przez Zielony12 Nowicjusz (200 p.)
0 głosów
0 odpowiedzi 509 wizyt
pytanie zadane 23 kwietnia 2021 w C i C++ przez Mavimix Dyskutant (8,390 p.)

92,565 zapytań

141,418 odpowiedzi

319,602 komentarzy

61,951 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...