2 Dimensionaler Array und delete[]



  • Wieso das ist doch nur ein C-Array. Ich habs jetzt auch nicht ausprobiert, ob es im Zusammenhang mit new geht, aber sonst ist das doch kein Problem.

    EDIT: Das heißt natürlich nicht, dass ich dazu raten würden, anstatt std::vector und boost::array so ein Array zu verwenden. Ein Array ohne Indexprüfung ist für mich der Tod. 🤡



  • SideWinder schrieb:

    Wenn das funktioniert frage ich mich nämlich warum ich jahrelang den Umweg über eine Schleife gemacht habe...

    weil du nicht gesehen hast, daß bei
    new typ[a][b]
    nur ein array von b objekten des types typ[a] angelegt wird. folglich muss auch a compilezeitkonstant sein.
    du hast vermutlich jahrelang zweidimensionale arrays verwendet, die in beiden dimensionen nicht compilezeitkonstant waren?
    edit:

    //ausnahmsweise mal getestet
    #include <iostream>
    using namespace std;
    
    int main(){
    	int (*a)[10]=new int[10][10];
    	int count=0;
    	for(int x=0;x!=10;++x)
    		for(int y=0;y!=10;++y)
    			a[x][y]=++count;
    	for(int y=0;y!=10;++y)
    		for(int x=0;x!=10;++x)
    			cout<<a[x][y]<<' ';
    	delete[] a;
    	return 0;
    }
    


  • Optimizer schrieb:

    EDIT: Das heißt natürlich nicht, dass ich dazu raten würden, anstatt std::vector und boost::array so ein Array zu verwenden. Ein Array ohne Indexprüfung ist für mich der Tod. 🤡

    std::vector prüft das?



  • SideWinder schrieb:

    Wenn das funktioniert frage ich mich nämlich warum ich jahrelang den Umweg über eine Schleife gemacht habe...

    Warum hast du nicht einfach mal einen Blick in unsere FAQ geworfen? Da habe ich schon vor hundert Jahren ein Beispiel gepostet.



  • volkard schrieb:

    Optimizer schrieb:

    EDIT: Das heißt natürlich nicht, dass ich dazu raten würden, anstatt std::vector und boost::array so ein Array zu verwenden. Ein Array ohne Indexprüfung ist für mich der Tod. 🤡

    std::vector prüft das?

    Er gehört wahrscheinlich zu den Leuten die at() benützen 🙄

    HumeSikkins schrieb:

    SideWinder schrieb:

    Wenn das funktioniert frage ich mich nämlich warum ich jahrelang den Umweg über eine Schleife gemacht habe...

    Warum hast du nicht einfach mal einen Blick in unsere FAQ geworfen? Da habe ich schon vor hundert Jahren ein Beispiel gepostet.

    Weil ich nicht jedesmal in die FAQ schaue wenn ich denke etwas ist falsch 😉

    MfG SideWinder



  • worin besteht denn der Unterschied zw. std::vector und boost::array?



  • grapefruit schrieb:

    worin besteht denn der Unterschied zw. std::vector und boost::array?

    http://www.boost.org/doc/html/array.html#array.intro



  • SideWinder schrieb:

    volkard schrieb:

    Optimizer schrieb:

    EDIT: Das heißt natürlich nicht, dass ich dazu raten würden, anstatt std::vector und boost::array so ein Array zu verwenden. Ein Array ohne Indexprüfung ist für mich der Tod. 🤡

    std::vector prüft das?

    Er gehört wahrscheinlich zu den Leuten die at() benützen 🙄

    Nein, ich gehör zu den Leuten, die ein assert im operator[] einbaun.



  • assert 😕

    Item& operator [] (unsigned long int index)
    {
        assert(index);
    }
    

    ??

    MfG SideWinder



  • T &operator[](size_type n) {
      assert(n<size);
      return array[n];
    }
    

    🙄



  • SideWinder schrieb:

    assert 😕

    assert(index);
    

    ??

    assert 💡

    assert(index<size());
    

    !!



  • wobei man zwischen at und [] eh unterscheiden sollte, da man ersteres nehmen sollte, wenn man nicht sicher weiss, dass der abgefragte Wert zur Laufzeit kleiner als size() ist. Da die asserts ja im Release Modus aus sind 🙄

    @volkard
    *haha* schneller :p


Anmelden zum Antworten