Alternative zu std::vector in NET?



  • Hallo Leute 🙂

    Da will ich euch doch mal wieder ein wenig stressen.
    Und zwar schreib ich, wie ich schon in einem oder zwei topics geschrieben hab, mein Programm etwas um.
    Nun habe ich aber std::vectors benutzt und möchte diese nun in Net umsetzen.
    Es ist hierbei wirklich erforderlich dass diese Struktur, die ich dort aufbaue erhalten bleibt.

    Nun meine Frage.
    Gibt es in NET auch vectoren,
    bzw heißen diese dort anders etc.
    Die Eigenschaften von den standard-vectoren wären mir schon sehr wichtig,
    da ich sonst recht viel umschreiben müsste..

    Ich freue mich auf construktive und hilfreiche antworten 🙂

    Der chris



  • Hallo,
    Die Datenstruktur, die am nächsten zum std::vector<T> kommst ist die
    System.Collections.ArrayList, bzw. die Generic Version aus System.Collections.Generics.List<T>.

    Das Interface ist jedoch komplett anders (nicht von der Funktionalität her, aber von der Namesgebung).



  • Hab ich mir grad mal angeschaut...is ja voll der mumpitz^^
    du weißt nicht zufällig wie ich direkt, wie bei den vectoren, werte per index dort rausbekommen? 🙂



  • List<T> besitzt doch nen Indexer mit dem du per Index auf die Werte drauf zugreifen kannst.



  • Meinst du den Enumerator oder was anderes?
    wenn ja...hast du dafür vielleicht ein kleines beispiel parat wie ich den deklariere und benutze?
    find bei der msdn nichts hilfreiches irgendwie



  • List<int> ^ foo = gcnew List<int>();
    
    foo->Add(42);
    
    int bar = foo[0];
    


  • wenn ja...hast du dafür vielleicht ein kleines beispiel parat wie ich den deklariere und benutze?
    find bei der msdn nichts hilfreiches irgendwie

    Hast Du überhaupt geschaut????
    http://msdn2.microsoft.com/en-us/library/6sh2ey19(vs.80).aspx

    Simon



  • jop ich hatte geschaft, hatte aber den index in [] total übersehen, da ich mir das abgewöhnt hatte, seit ich vectoren benutzt hab^^
    da dort alles per ".at(index)" lief
    aber danke, habs einfach übersehn 🙂

    EDIT: Ihr wisst nicht auch zufällig wie ich die ArrayList oder List mehrdimensional bekomme?
    so wies beim vector ging, gehts leider nicht...



  • Hallo,
    Wie gings denn bei std::vector?

    Ich kann mir im Moment nicht vorstellen, was mit ArrayList / List nicht gehen sollte.

    simon



  • Bei Vectoren konnte man z.b. ein 2dimensionalen vector erzeugen,
    indem man den eindimensionalen noch einmal in einen vector packt.
    also im prinzip sieht dieses dann so aus:
    vector<vector <string>> my_var;

    Diese art und weise hab ich auch bei arraylist/list versucht, jedoch irgendwie ohne erfolg,
    oder ich hab irgendwas falsch gemacht.
    hast du vielleicht rat, wie ich mit arraylist/list mehrere dimensionen erzeugen kann?



  • List<List<foo^>^>^ lst2dOfFoo;
    


  • List<List<String^>^>^ test = gcnew List<List<String^>^>(2);
    

    also compilieren lässt es sich
    aber wenn ich z.b. test[0]->Add("blabla"); mache kommt nen fehler "System.ArgumentOutOfRangeException"
    obwohl ich die anfangskapazität für die erste dimension auf 2 gesetzt hab.
    wenn ich mir die Kapazität per test->Capacity ausgeben lasse steht dort auch eine 2

    echt der wurm drin 😣



  • Hallo,
    Du musst zuerst in der Liste der Listen ein Element hinzufügen (eine Liste).

    List<List<String^>^>^ test = gcnew List<List<String^>^>(2);
    test->Add(gcnew List^());
    test[0]->Add("blabla");
    

    Mit der Kapazität erzeugst Du keine Elemente.
    Du reservierst nur Speicher.
    Gruss Simon

    PS: Ev. ist meine C++/CLI syntax nicht so astrein.. aber prinzipielle liegt hier das Problem..



  • List<List<String^>^>^ test = gcnew List<List<String^>^>(); 
    test->Add(gcnew List<String^>()); 
    test[0]->Add("blabla");
    


  • letztere version funktioniert 🙂
    ich danke euch allen, die sich hier eingeklickt haben
    nu kann ich endlich mein projekt weitermachen 🙂
    wünsche euch ein schönes WE und einen schicken ersten advent

    der chris


Anmelden zum Antworten