Vektor als Parameter für eine Funktion
-
Bei deinem nicht funktionierenden Beispiel: Angenommen es würde funktionieren. Und wie würdest du mit dem erstellten und gefüllten Vector weiterarbeiten? Fällt die was auf?
-
SeppJ schrieb:
Bei deinem nicht funktionierenden Beispiel: Angenommen es würde funktionieren. Und wie würdest du mit dem erstellten und gefüllten Vector weiterarbeiten? Fällt die was auf?
Man könnte den Vektor zum Beispiel ausgeben oder die Werte in eine Datei schreiben.
Du willst vermutlich darauf hinaus, daß der Speicherbereich des Vektors, sobald der Gültigkeitsbereich der Funktion verlassen wird, freigegeben wird?
Wenn man den Vektor nicht mehr braucht, ist das doch sinnvoll, oder nicht?
-
redrew99 schrieb:
SeppJ schrieb:
Bei deinem nicht funktionierenden Beispiel: Angenommen es würde funktionieren. Und wie würdest du mit dem erstellten und gefüllten Vector weiterarbeiten? Fällt die was auf?
Man könnte den Vektor zum Beispiel ausgeben oder die Werte in eine Datei schreiben.
Wie soll das gehen? Mach doch mal vor, wie du dir das vorstellst.
Du willst vermutlich darauf hinaus, daß der Speicherbereich des Vektors, sobald der Gültigkeitsbereich der Funktion verlassen wird, freigegeben wird?
Nein. Ich will auf den Unterschied zwischen R-Values und L-Values hinaus. Der Vector aus deiner Funktion wird sowieso kopiert, so wie du es jetzt hast.
Wenn man den Vektor nicht mehr braucht, ist das doch sinnvoll, oder nicht?
Was genau soll sinnvoll sein?
Kann's sein, dass du in deinem Beispielprogramm ein bisschen durcheinander gekommen bist, was eine Referenz sein soll und was nicht?
-
Nein. Ich will auf den Unterschied zwischen R-Values und L-Values hinaus. Der Vector aus deiner Funktion wird sowieso kopiert, so wie du es jetzt hast.
Ok. Jetzt ist der Groschen gefallen.
Eine Referenz auf eine Funktion, die einen Wert zurückgibt, ist unlogisch.
Richtig wäre dann alsovoid test(vector<int>myvector,int &a);Was genau soll sinnvoll sein?
Naja, wenn ein Vektor nicht mehr benötigt wird, weil der Inhalt z.B. in eine Datei geschrieben wurde, warum soll dann der belegte Speicherbereich nicht freigegeben werden.
Wie soll das gehen? Mach doch mal vor, wie du dir das vorstellst.
void test(vector<int>myvector,int &a); void test(vector<int>myvector,int &a) { myvector.push_back (a); cout<<myvector[0]; //Hier z.B. Ausgabe des Vektors,alternativ Speicherung in einer Datei. }Kann's sein, dass du in deinem Beispielprogramm ein bisschen durcheinander gekommen bist, was eine Referenz sein soll und was nicht?
Vermutlich
. Man verzettelt sich schneller, als man denkt.
-
redrew99 schrieb:
vector<int>myvectorIst aber keine Referenz auf eine Funktion, sondern ein normaler vector<int> Parameter, der kopiert wird.
Eine Referenz auf ein Funktion, die std::vector<int> zurückgibt, sieht so aus:
std::vector<int> (&foo) ()
-
SeppJ schrieb:
Bei deinem nicht funktionierenden Beispiel: Angenommen es würde funktionieren. Und wie würdest du mit dem erstellten und gefüllten Vector weiterarbeiten? Fällt die was auf?
LOL.

-
EOP schrieb:
SeppJ schrieb:
Bei deinem nicht funktionierenden Beispiel: Angenommen es würde funktionieren. Und wie würdest du mit dem erstellten und gefüllten Vector weiterarbeiten? Fällt die was auf?
LOL.

314159265358979 schrieb:
Eine Referenz auf ein Funktion, die std::vector<int> zurückgibt, sieht so aus:
std::vector<int> (&foo) ()Bist du dir da sicher?

-
Ja, bin ich.
-
LOL.
Ok. Jetzt ist der Groschen gefallen.
So kann man sich täuschen.
Und wie initialisiere ich dann deinen Prototypen?
-
std::vector<int> foo(); std::vector<int> (&bar) () = foo;
-
So, und jetzt hat der OP evtl. auch noch was gelernt.

N schönes Wochenende noch.