Klasa - drzewo (w tablicy). Przeciążenie operatorów wpisywania i wypisywania elementów
Ostatnio zmodyfikowano 2016-01-15 20:53
bathory0xff Temat założony przez niniejszego użytkownika |
Klasa - drzewo (w tablicy). Przeciążenie operatorów wpisywania i wypisywania elementów » 2016-01-15 18:23:34 Witam, mam pytanie co do sposobu użycia tablicy jednowymiarowej w klasie. Kod: #include <iostream> #include <cstdio> typedef long long ll; using namespace std;
class Tree { public: int * TREE; static int firstpos; static int lastpos; Tree(); Tree( int ); ~Tree(); void construct(); void update( const int &, const int & ); };
int Tree::firstpos = 0; int Tree::lastpos = 0;
Tree::Tree() { }
Tree::Tree( int number ) : TREE( new int[ number << 1 ] ) { firstpos = number; lastpos = number << 1; }
Tree::~Tree() { delete[] TREE; }
void Tree::construct() { for( int i = firstpos - 1; i; i-- ) TREE[ i ] = max( TREE[ i << 1 ], TREE[( i << 1 ) + 1 ] ); }
void Tree::update( const int & pos, const int & value ) { int i = firstpos + pos - 1; TREE[ i ] = value; for(; i > 1 && TREE[ i >> 1 ] < TREE[ i ]; i >> 1 ) TREE[ i >> 1 ] = TREE[ i ]; }
int main() { int number, checks; cin >> number >> checks; Tree A( number ); for( int i = 0; i < number; i++ ) cin >> A.TREE[ i + A.firstpos ]; A.construct(); }
Moje pytanie to w jaki sposób mogę przeciążyć operatory >>, <<, [] aby móc wczytywać do tablicy elementy zwykłą instrukcją cin >> A[ i ] (tak samo również wypisywać). Chciałbym, aby element który wczytuję (lub wypisuję) był to element z indeksem firstpos+i. W jaki sposób rozpisać to aby działało to poprawnie? Na razie nie ma tu zbyt wiele, chce po prostu przygotować klasę, którą będę mógł wykorzystać w 2 zadaniach. |
|
j23 |
» 2016-01-15 18:39:44 class Tree { int * TREE; public: ... int & operator []( size_t i ) { return TREE[ firstpos + i ]; } }; O to chodzi? |
|
bathory0xff Temat założony przez niniejszego użytkownika |
» 2016-01-15 18:44:27 No tak, to już ogarnąłem od razu, że coś takiego mi będzie potrzebne i to napisałem, ale to nie działa. Jak to połączyć z istreamem i ostreamem? Jak mam zaprzyjaźnioną klasę np istream to dla normalnej zmiennej (np int) wprowadzam po prostu jej wartość. Jak wprowadzić do określonego indeksu w tablicy? |
|
mateczek |
» 2016-01-15 20:25:58 No tak, to już ogarnąłem od razu, że coś takiego mi będzie potrzebne i to napisałem, ale to nie działa.
|
moim zdaniem działa !!! dlaczego uważasz że sposób jest zły?? |
|
bathory0xff Temat założony przez niniejszego użytkownika |
» 2016-01-15 20:53:31 Dobra, udało mi się metodą prób i błędów. Z początku myślałem że trzeba połączyć przeciążenie operatora [] z innymi operatorami i to był mój błąd. Kiedy jednak przeciążę tylko operator [] to o dziwo działa przy każdej operacji. Dziękuję za pomoc, problem rozwiązany. |
|
« 1 » |