übergabe vector an funktion



  • SERVUS.

    ich habe eine frage zu folgendem code:

    void SET_CLUSTER (vector <std::pair <int,int>> CLUSTER)
    {
    	int i;
    	std::pair <int,int> pkt;
    
    	for (i=0;i<5;i++)
    	{
    		pkt.first = pkt.second = i;
    		CLUSTER.push_back(pkt);
    	}
    }
    
    int main ()
    {
    	std::pair <int,int> pkt;
    	vector <std::pair <int,int>> CLUSTER;
    
    	pkt.first = 0;
    	pkt.second = 1;
    	CLUSTER.push_back(pkt);
    
    	SET_CLUSTER(CLUSTER);
    
    	cout << "\n" << CLUSTER.size() << "\n";
    
    	return 0;
    }
    

    leider ändert sich der inhalt des vectors in SET_CLUSTER nicht. ich könnte das besser machen, wenn ich CLUSTER als RETURN-wert wieder an 'int main()' zurückgebe. geht das aber auch irgendwie anders (mit einem &-ZEICHEN oder so, habe leider vergessen, was das war. irgendetwas nur mit adresse übergeben oder so 😕 )?

    DANKE.
    STICK.

    EDIT: man könnte ja CLUSTER auch so definieren:
    "vector <std::pair <int,int>> CLUSTER[1]". dann würde sich der inhalt in SET_CLUSTER auch ändern. aber ich wollte das gerne mit der übergabe der adresse oder so machen. weis aber nicht mehr, wie das geht.



  • Hi,

    du musst den vector als Referenz übergeben dann klappts auch mit der Änderung.

    void SET_CLUSTER (vector <std::pair <int,int>> & CLUSTER)
    

    BR
    Vinzenz



  • Stört sich eigentlich keiner an den aufeinanderfolgenden > - Zeichen bei dem hier: vector<pair<int,int>> ?
    Das kompiliert sicher nicht.

    @stick_thai
    Erlaubt es deine Aufgabenstellung, ein map<int, int> anstatt ein vector<pair<int, int> > zu verwenden?

    MfG

    GPC



  • HALLO GPC.

    naja, ich habe bisher noch keinen anlass gesehen, "map" anstatt von "vector" zu benutzen. was sind den die vorteile von "map"?

    mein compiler gibt bei der zeichenfolge: vector<pair<int,int>> kein problem aus. was sollte daran nicht stimmen?

    STICK.

    @evilissimo: DANKE. das mit der referenz funktioniert jetzt.



  • stick_thai schrieb:

    HALLO GPC.

    naja, ich habe bisher noch keinen anlass gesehen, "map" anstatt von "vector" zu benutzen. was sind den die vorteile von "map"?

    sehr schnelles suchen und einfügen. Außerdem hast du eine saubere Schlüssel-Wert Zuordnung. Siehe auch CStolls Artikel, Abschnitt 4.

    mein compiler gibt bei der zeichenfolge: vector<pair<int,int>> kein problem aus. was sollte daran nicht stimmen?

    Na jo, >> ist eigentlich ein Shift-operator und er wird auch für das Lesen aus Streams verwendet.

    Der Borland Compiler meckert jedenfalls, genauso wie es der g++ IIRC tut.

    MfG

    GPC



  • okay. gibt es dann ein methode, wie ich das ganze "sauber" lösen könnte? verwende derartige zeichenfolgen recht häufig in meinem code.

    DANKE.
    STICK.



  • stick_thai schrieb:

    naja, ich habe bisher noch keinen anlass gesehen, "map" anstatt von "vector" zu benutzen. was sind den die vorteile von "map"?

    Hängt ganz davon ab, was du mit dieser Struktur erreichen willst. Eine map<> speichert Schlüssel/Wert-Paare geordnet nach ihrem Schlüssel.

    mein compiler gibt bei der zeichenfolge: vector<pair<int,int>> kein problem aus. was sollte daran nicht stimmen?

    Normalerweise wird ein Leerzeichen zwischen den beiden > benötigt, sonst liest ein normaler Compiler das >> als Shift-Operator (und meldet einen Syntax-Fehler, weil dort kein Operator reinpasst).



  • gibt es dann ein methode, wie ich das ganze "sauber" lösen könnte?

    Komplexe dinge wie : "vector<pair<int,int> > " typdefen ... kostet nix, macht nur uebersichtlicher ...

    typedef pair<int,int> MyPairT; 
    typedef vector<MyPairT> MyVectorT;
    
    MyVectorT mv; 
    
    mv.push_back(MyPairT(3,4));
    

    ob vector oder map ?

    - brauchst du nen Index-bezogenen Zugriff ... also schnell das 5. element ...
    oder vom element X schnell 3 elemente weiter ? (iteration (immer alles durchlaufen) oer gezieltes suchen nach Inhalten zaehlt hier nich, das iss was anneres)

    - oer brauchst du deine Daten im block, also hintereinanderliegend im speicher um es fix serialisieren zu koennen oder an C-Funktionen zu ueberreichen ?

    Kannst du beide Fragen mit "nein" beantworten ... sollte vector nicht der container deiner wahl sein !

    ciao ...



  • vielen dank für die tips. ich werde mal überlegen, ob ich auf 'MAP' umsteige.

    gruss.
    STICK.



  • GPC: Dein Einwurf war unbegründet. f'`8k

    Gruß, TGGC (\-/ returns)


Anmelden zum Antworten