<vector> container



  • grüße an alle

    ich möchte gerne einen vector - container konstruieren, jedoch dabei auf die stl oder auf andere bibliotheken verzichten (muss ich leider).
    leider bin ich aber in c++ nicht fest und habe ehrlich gesagt keine ahnung wie ich das anstellen soll.
    hättet jemand vielleicht einen verweis auf eine gut erklärte seite, die mir das konstruieren von vectoren erklärt. am besten noch, es an beispielen zeigen würde.

    oder falls jemand unter euch ist, der mir das anhand von beispiel-code erklären könnte, wäre ich natürlich sehr froh drüber.

    der container soll 2d punkte aufnehmen können und mittels index-operator das arbeiten auf ihn garantieren

    vielen dank
    grüße kylanysik



  • http://tutorial.schornboeck.net/los/array_class.htm
    Die Loesung fuer eine Aufgabe aus meinem C++ Tutorial.



  • hi.. meine reaktion kommt zwar sehr spät, aber sie kommt 😉
    vielen dank!

    aber ich habe diesbezüglich auch gleich einmal eine frage:

    void swap(Array& other)
          {
            swap(value, other.value);
            swap(length, other.length);
          }
    

    wie funktioniert diese? denn via aufruf brauchste doch eine weitere swap, die 2 parameter erhält oder wie ist das geregelt?

    grüße kylanysik



  • Wieso 2 parameter, so richtig versteh ich nicht was du meinst.



  • Kylanysik schrieb:

    wie funktioniert diese? denn via aufruf brauchste doch eine weitere swap, die 2 parameter erhält oder wie ist das geregelt?

    Ganz oben:

    #include <algorithm> //für swap
    

    swap ist eine vordefinierte funktion die etwa so aussieht:

    template<typename T>
    void swap(T& a, T& b) {
      T c(a);
      a=b;
      b=c;
    }
    

    Die Idee ist nun, dass wir Array.swap() verwenden können um swap generell zu spezialisieren:

    void swap(Array& a, Array& b) {
      a.swap(b);
    }
    

    Und nun können wir dann wieder einfach
    swap(a,b)
    verwenden und haben keine unnötigen kopien.
    und falles es eben keine spezialisierte version gibt, wird eben der standard dreieckstausch verwendet...



  • Falls du den Namensraum std nicht ausleerst, kannst du auch eine using -Deklaration hinschreiben:

    void swap(Array& other)
    {
        using std::swap;
        swap(value, other.value);
        swap(length, other.length);
    }
    

    Wenn jetzt eine spezifische Funktion swap() für die Typen von value oder length existiert, wird die angewandt, ansonsten (wegen des using ) halt std::swap() (wie bei Shade Of Mine).



  • vielen lieben dank 🙂
    das problem ist gelöst

    grüße kylanysik


Anmelden zum Antworten