Funktion mit STL vector



  • Hallo Community!

    Ich habe eine Klasse "Zahlenliste" und soll eine Funktion "suche" schreiben, aber ohne die STL Funktion find.
    Meine Funktion soll einen Iterator zurückgeben der auf die gesuchte Zahl oder hinter das letzte Element zeigt.

    Ich weiss nicht wirklich wie ich da vorgehen muss und wie ich mich durch meine Liste "bewegen" kann. Was mir klar ist , dass ich mittels einer for Schleife durch meine Liste "wandern" muss.

    #include<iostream>
    #include<vector>
    #include<algorithm>
    #include<cstdlib>
    #include<cmath>
    
    using namespace std;
    
    class Zahlenliste{
    		private:
    			vector<int> zahlen;
    			vector<int>::iterator it;
    		public:
    			Zahlenliste() {}
    			Zahlenliste(int n)
    			{
    		    	srand(time(NULL));
    					for(int i=0;i<n;i++)
    					{
    					int zahl=(int)(ceil(((double)rand()/RAND_MAX)*n));
    					zahlen.push_back(zahl);
    					}
    			}
    			friend ostream& operator<<(ostream& os,Zahlenliste& a);
    			it suche(int i);
    };
    
    it Zahlenliste::suche(int x)
    {
    for(it=zahlen.begin();it!=zahlen.end();it++)
    
    }
    
    ostream& operator<<(ostream& os, Zahlenliste& a)
    {
    	int z=0;
    	for(int i=0;i<a.zahlen.size();i++)
    		{
    		os << a.zahlen[i];
    		if(z<a.zahlen.size()-1)
    		os<<" , ";
    		z++;
    		}
    	os << endl;
    	return os;
    }
    
    int main()
    {
    Zahlenliste obj(10);
    cout<<obj;
    return 0;
    }
    

    Kann mir wer einen Tipp geben?

    Lg Caro



  • Du weißt dass du "wandern" musst und offenbar weißt du auch wie. Du sagst du weißt aber nicht wie du dich "bewegen" kannst - wo ist da der Unterschied? Ich versteh dein Problem nicht ganz. Im Buch/Tutorial deiner Wahl steht doch sicherlich auch drin wie man Iteratoren dereferenziert, d.h. wie man über einen Iterator auf das entsprechende Containerelement zugreift (und es z.B. mit dem zu suchenden Element vergleicht).



  • Stimmt denn die Syntax der Funktionsdeklaration?



  • Also meine Frage ist , meine Funktion soll ja einen Iterator zurückgeben.
    Wenn ich meinen Iterator als private deklariere und den Funktionsrumpf so schreibe wie im Programm, dann sagt mir mein Compiler "âitâ does not name a type
    ".

    Könnt Ihr mir einen Tipp geben wie der Rumpf aussehen muss?

    it Zahlenliste::suche(int x)
    {
    vector<int>::iterator it; 
    for(it=zahlen.begin();it!=zahlen.end();it++)
    if(*it==x)
    
    }
    


  • vector<int>::iterator ist der Typ. Also

    vector<int>::iterator Zahlenliste::suche(int x)
    


  • Vielen dank!!


Anmelden zum Antworten