pascal-array[2..n] in c++???



  • hallo,
    in pascal habe ich ein array [2..n] mit n als konstante. wie schreibt man das in c/c++? int arr[n] kann nicht sein, weil das ding dann bei 0 anfängt.
    danke.



  • direkt kann man sowas nicht machen. es gibt die saubere c++ variante, das mit einem template zu machen und die entsprechenden operatorn zu überladen, die unheimlich mühsame und fehlerträchtige, überall 2 abzuzählen, die einfache, die ersten 2 elemente zu vergessen einfach eine array der grösse n anzulegen und nur einach die elemente ab 2 zu benutzen, und die ganz dreckige variante vom arraypointer 2 abzuzählen (weiss aber nicht ob das nich zu undefiniertem verhalten führt).



  • Und? Dann fängst Du eben bei 0 statt bei zwei mit der Zählerei an. Sonst könnte man an

    template<typename T, unsigned a, unsigned b>class Array {
        T array[b-a];
    public:
        T& operator[](unsigned ndx) { return array[ndx-a]; }
    };
    

    weiterbasteln. Naja.



  • Danke.



  • Daniel E. schrieb:

    Und? Dann fängst Du eben bei 0 statt bei zwei mit der Zählerei an. Sonst könnte man an

    naja nur manchmal ist es eben echt praktisch, wenn ein array nicht bei 0 anfängt. bei einem heap z.b. mit dem kann man wunderbar umgehen wenn indizes bei 1 anfangen. wenn man dort natürlich nur die datenstruktur will ist es einfacher das erste element einfach nicht zu betrachten. will man aber ein heapsort das inplace arbeitet kann man das erste elemente nicht einfach weglassen. und dann bei jedem zugriff immer 1 vom index abzählen ist einfach mühsam und führt zu fehlern.



  • In manchen Fällen ist also Pascal nicht immer Letzter.



  • Naja, in diesen Sprachen wird der Index wohl auch umgerechnet ?!



  • Bei einem Pascal-Array wie hier ist dasselbe wie oben schon gesagt, ja?

    const p = 18;
    var upr: array[-q..q] of boolean;


Anmelden zum Antworten