grosse arrays in 2 Klassen



  • Hi,

    ich habe ein Programm weiterzuschreiben, das 2 Klassen hat. Die eine CBuffer
    hat 4 int Vektoren mit 4Mio Stellen jew. In der anderen Klasse wird mit den Vektoren gerechnet.
    Derzeit wird CBuffer in der anderen Klasse vorwärts deklariert und alle Vektoren mit extern eingebunden.
    Die Berechnung wird indexweise durchgeführt. Bsp: Vektor1[513 + i ] + Vektor2[34+j];

    Ich möchte als allererstes die Klassen trennen und das extern rausschmeissen.
    Wie soll ich dann aber die Berechnung durchführen. Wenn ich z. B. nur Pointer auf die Anfangsadressen der Buffer übergebe, kann ich die ganzen ellenlangen Berechnungen mit dem Index, die schon da sind vergessen.
    Gibts bessere Ideen?



  • Wieso, der Vector kann doch auch per Index zugreifen.



  • Verstehe ich nicht, MaSTaH!

    übergebe ich nun z. B . &Vektor1[0] und &Vektor2[0] der anderen Klasse, hat die nur von der einen 2 Adressen, nämlich die Anfangsadressen dieser Vektoren.

    In der Klasse Berechnung wird nun aber explizit mit den Indexen gearbeitet.
    vec1[n+i+30]..... Damit würde ich gern weiterrechnen, habe aber nur die zwei Adressen meiner Zeiger.



  • int feld[10];
    
    int * zeiger = feld;
    
    zeiger[5] = 7; // Zauber zauber.
    

    Ne nicht wirklich: Den operator [] gibts auch für Zeiger.



  • Und vector garantiert ein C-kompatibles Speicherlayout!

    Aber warum willst Du da überhaupt mit Zeigern rummachen? Übergib doch einfach den vector per Referenz, oder laß ihn die andere Klasse sich holen.
    Wenn die Klassen sowieso fest zusammengehören und nie getrennt werden kannst Du auch einfach bei der Konstruktion ne Referenz mitgeben.

    Aber allgemein würd ich's so machen:

    class A
    {
       vector<int> TollesArray;
    public:
       vector<int> & GetArray() { return TollesArray; }
    }
    
    class B
    {
       A * Kollege;
    public:
       B(A * a) { Kollege = a; }
       void MachWasTollesMitDemArray()
       {
          vector<int> & Array = Kollege->GetArray();
          // und jetzt ganz normal damit arbeiten.
          // Diese Referenz hat auch den großen Vorteil, daß sie nicht ungültig
          // wird, wenn jemand außen was am anderen Array ändert...
       }
    }
    


  • Vielen Dank für die Antworten.
    Jester - das wars, was ich wollte! Danke.


Anmelden zum Antworten