"Element eines Vektors" an Funktion übergeben



  • Hallo!

    Ich erzeuge einen Vektor aus einem String. Wenn ich nun bspw. das 5te Element aus diesem Vektor benötige, schreibe ich folgendes:

    std::string strt1 = y[4];

    um "strt1" an eine Funktion zu übergeben.

    Meine Frage nun ist folgende:

    Gibt es die Möglichkeit das 5te Element ohne sie in ein string zu kopieren an eine Funktion zu übergeben? 😕
    Wie muß die Parameterliste dieser Funktion dann aussehen? 😕
    Ich möchte auf keinen Fall den Gesamt-Vektor übergeben!

    Danke



  • Du kannst einen Zeiger oder eine Referenz übergeben:

    void bla(const std::string& element)
    
    bla(vec[4]);
    


  • Hallo!

    Habe ich das jetzt richtig verstanden?

    Durch den Aufruf:

    bla(vec[4]);
    

    behandelt die Funktion:

    void bla(const std::string& element)
    

    das übergebene 5te Element als ein const string?



  • Nein, als eine Referenz auf einen konstanten std::string. Dadurch wird nicht der Kopier-Konstruktor aufgerufen und der Funktionsaufruf sollte i.d.R. schneller sein.



  • Ok, ich habe es verstanden! Danke!

    Ich habe eine weitere Frage, weiß aber nicht, ob ich es doch besser in einem neuen Beitrag formulieren soll!

    Folgendes:

    (1) Ich habe einen vector<string>, der sagen wir mal nur int-Werte beinhaltet. (Vorher befanden sich auch strings hierin, deswegen ein vector<string>)

    Wie kann ich diesen vector<string> strVec auf ein vector<int> intVec übertragen?

    (2) Wie sieht es aus, wenn ich nur einige Elemente aus einem vector<string> an ein vector<int> übertragen müßte?

    Danke!



  • Serjey schrieb:

    (1) Ich habe einen vector<string>, der sagen wir mal nur int-Werte beinhaltet. (Vorher befanden sich auch strings hierin, deswegen ein vector<string>)

    Wie kann ich diesen vector<string> strVec auf ein vector<int> intVec übertragen?

    (2) Wie sieht es aus, wenn ich nur einige Elemente aus einem vector<string> an ein vector<int> übertragen müßte?

    Jedes Element einzelt konvertieren und in den Ziel Vector speichern

    So konvertiert man



  • Hi!

    Zu (1)
    Es ist also nicht möglich, auch wenn ich 100% sicher bin, das sich nur Zahlen in meinem vector<string> befinden, diesen vector an vector<int> zu kopieren/übertragen wie auch immer? Das verstehe ich nicht so ganz.

    zu (2)
    Nach Deiner Ausführung nehme ich an, daß diese Möglichkeit überhaupt nicht gegeben ist.

    Habe ich Deine Antwort richtig verstanden?

    Danke



  • Doch natürlich ist es möglich. Hier ein Beispiel:

    #include<iostream>
    #include<sstream>
    #include<vector>
    #include<string>
    
    using namespace std;
    
    int main()
    {
    	vector<string>::iterator strIter;
    	vector<int>::iterator intIter;
    
    	vector<string> strVec;
    	vector<int> intVec;
    
    	strVec.push_back("1");
    	strVec.push_back("2");
    	strVec.push_back("3");
    
    	for(strIter = strVec.begin(); strIter != strVec.end(); ++strIter)
    		intVec.push_back(atoi(strIter->c_str()));
    
    	cout << "Inhalt intVec:\n"; 
    
    	for(intIter = intVec.begin(); intIter != intVec.end(); ++intIter)
    		cout << *intIter << endl;
    
    	intVec.clear();
    	strVec.clear();
    
    	intVec.push_back(4);
    	intVec.push_back(5);
    	intVec.push_back(6);
    
    	for(intIter = intVec.begin(); intIter != intVec.end(); ++intIter)
    	{
    		ostringstream Str;
    		Str << *intIter << endl;
    		strVec.push_back(Str.str());
    	}
    
    	cout << "Inhalt strVec:\n";
    
    	for(strIter = strVec.begin(); strIter != strVec.end(); ++strIter)
    		cout << *strIter;
    
    	return 0;
    }
    


  • Kann man das nicht mit std::transform vereinfachen?


Anmelden zum Antworten