# std::vector alsOutput einer Funktion



## Maxx03 (30. Juni 2007)

Hallo,

Ich würde gerne von einer Funktion einen vector (container aus der std) zurück bekommen.
Wenn ich das so in einer Datei schreibe funktioniert es auch:


```
#include <cstdlib>
#include <iostream>
#include "funktionen.h"
#include <vector>
using namespace std;

vector<int> funktion(int anzahl) 
{
vector<int> matrix; 
for (int i=1; i < anzahl ; i++)  matrix1.push_back(i);
return matrix;
}

int main(int argc, char *argv[])
{
vector<int> matrix;
matrix=funktion(10);
for (int i=0;i<10;i++)cout<<matrix[i];  // Ausgabe 1234....

    system("PAUSE");
    return EXIT_SUCCESS;
}
```

(Zwischenfrage: Ist das "sauber" so? Dass ich in der Funktion einen vector erstelle und mit return ausgebe ? normal muss man hier doch mit zeigern oder dem new konstruktor arbeiten  oder ist vector<int> sowieso schon ein zeiger )

Wenn ich nun aber die funktion in eine andere Datei schreibe, und den Funktionskopf in eine Header Datei aufnehme stört es sich immer an der Zeile 

vector<int> matrix_instanz(int anzahl) ;

in der header Datei ("expected constructor , destructor or type conversion before < token" "expected , or ; before < token"...)

Was hab ich falsch gemacht ?


----------



## Maxx03 (30. Juni 2007)

Ok ich hab dämlicher weisse vergessen using namespace std; in die header datei zu schreiben 

Bleibt die Frage ob das so "sauber" ist?  (ich weiss dass ich hier auch mit einem einfachen int array arbeiten könnte, aber ich wollte das für vector testen....)


----------



## the_undertaker (30. Juni 2007)

Schreibe das Ganze doch bitte in Code-Tags, dann wirds übersichtlicher


----------



## deepthroat (30. Juni 2007)

Hi.





Maxx03 hat gesagt.:


> Hallo,
> 
> Ich würde gerne von einer Funktion einen vector (container aus der std) zurück bekommen.
> Wenn ich das so in einer Datei schreibe funktioniert es auch:
> ...


Nein, vector<int> ist kein Zeiger. Aber im Grunde ist diese Art der Werterückgabe "sauber". Dabei werden allerdings bei der Rückgabe die Werte kopiert, was man meist versucht zu vermeiden da es unnötig und zeitaufwendig ist. Dann muß man allerdings Zeiger oder Referenzen verwenden (was man dann meist über call-by-reference realisiert).



Maxx03 hat gesagt.:


> Wenn ich nun aber die funktion in eine andere Datei schreibe, und den Funktionskopf in eine Header Datei aufnehme stört es sich immer an der Zeile
> 
> vector<int> matrix_instanz(int anzahl) ;


Da sollte man den Bereichsauflösungsoperator verwenden und den Namensraum direkt angeben:
	
	
	



```
std::vector<int> matrix_instanz(int anzahl);
```
Eine "using namespace std" Anweisung sollte man nicht in eine Headerdatei schreiben, da dadurch der globale Namensraum "verschmutzt" wird für alle C++ Dateien die diese Headerdatei verwenden.

Gruß


----------

