Vector an Funktion übergeben
-
Guten Abend!
Ich denke der Titel sagt schon alles
Mit Arrays geht das ja recht simpel, einfachvoid function(int [])
und man hat es.
Nur wie geht das bei Vectoren?
-
Sorry ich verstehe dich vielleicht nicht, aber wo ist dein Problem ?!
void function(vector<int>& x) bzw.
void function(vector<int>* x)mfg JJ
-
Genau das meine ich, nur ich bekomm das hin nicht. Beim Array wird ja automatisch nur eine Referenz übernommen.
Könntest du ein kleines komplettes Beispiel posten?
-
Exakt.
Und beim Vector übergibst du halt ebenfalls ne Referenz auf den Vector.
void function(vector<int>& x)
-
Folgene drei Vrianten sind üblich:
void foo(cont vector<int>& vec); // (1) void foo(vector<int>& vec); // (2) void foo(vector<int> vec); // (3)
(1) übergibst du eine konstante Referenz. D.h. der Vektor muss nicht kopiert werden,
und du versprichst dem Aufrufer, nichts an seinem Vektor zu ändern. Du drafst
in foo also nicht in vec schreiben.(2) eine (einfache) Referenz. Jetzt darfst du den Inhalt von vec in foo ändern,
und der Aufrufer bekommt die Änderungen zu spüren.(3) eine Kopie. Du darfst in foo vec ändern, und der Aufrufer merkt nix davon.
Nachteil: Der ganze Vektor muss kopiert werden, was u.U. zeitintensiv werden kann.
Andererseits gibt es auch Situationen, in denen du das machen musst.
-
Taurin schrieb:
(1) übergibst du eine konstante Referenz.
<klugscheiß>
Keine konstante Referenz sondern eine Referenz auf const. Referenzen sind bereits per Definition konstant, da sie einmal gebunden, nie mehr ein anderes Objekt referenzieren können.
</klugscheiß>
-
Hm, kann man innerhalb der Funktion const & nicht auch verändern, aber es ändert sich dafür nicht das, worauf die Referenz zeigt?
Irgendwie habe ich jetzt sowas im Kopf, wenn es nicht stimmt, dann korrigiert mich bitte.
-
Mis2com schrieb:
Irgendwie habe ich jetzt sowas im Kopf, wenn es nicht stimmt, dann korrigiert mich bitte.
Korrigier.