Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Klasa - drzewo (w tablicy). Przeciążenie operatorów wpisywania i wypisywania elementów

Ostatnio zmodyfikowano 2016-01-15 20:53
Autor Wiadomość
arciobus
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:
C/C++
#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.
P-143547
j23
» 2016-01-15 18:39:44
C/C++
class Tree
{
    int * TREE;
public:
    ...
   
    int & operator []( size_t i ) { return TREE[ firstpos + i ]; }
};
O to chodzi?
P-143548
arciobus
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?
P-143549
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??
P-143554
arciobus
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.
P-143557
« 1 »
  Strona 1 z 1