STL: Vector Element in einem Funktionskopf?



  • Hallo zusammen,

    ich bin ein absoluter Neuling, was bzgl. C++ Programmierung angeht.

    ich möchte eine Funktion schreiben, die von einem Vektor abhängig ist. Für C++ gibt es ja diese nüztliche <vector> Klasse.

    #include <vector>
    int index_suche_mehrfach (double u, double knoten[], int m)
    {
    	int i=3, help=3;								
    
    	for (i=3; i <= m-1; i++)			//B-Splines 3.Ord deswegen i=3
    	{
    		if (u >= knoten[i])
    			help=i;
    		else
    			break;
    	}
    	return help;
    }
    

    An der Stelle von "double knoten[]" im Funktionskopf möchte ich einen Vektor von der <vector> Klasse verwenden. Was muss ich ändern?

    Vielen Dank!
    skyforce



  • #include <vector>
    int index_suche_mehrfach (double u, const std::vector<double>& knoten, int m)
    {
       int help=3;                               
    
        for (int i=3; i < m; ++i)            //B-Splines 3.Ord deswegen i=3
        {
            if (u >= knoten[i])
                help=i;
            else
                break;
        }
        return help;
    }
    

    Edit: Zwischendurch stand hier große Grütze.
    Und jetzt immernoch -.-
    Ach, ich geb's einfach auf, daraus ein schöneres Konstrukt hinzubekommen.



  • skyforce schrieb:

    An der Stelle von "double knoten[]" im Funktionskopf möchte ich einen Vektor von der <vector> Klasse verwenden. Was muss ich ändern?

    Rein technisch ist die Frage zwar schon beantwortet, ich will Dir trotzdem noch eine Version zeigen, die auf den Parameter m verzichtet - den ich als Arraygroesse gedeutet habe - die Notwendigkeit für eine Hilfsvariable eliminiert und die Vergleiche auf reine < (kleiner als) reduziert.

    /* Sucht den letzten Index i(mit i=[3..n)) für den gilt knoten[i]<=u */
    int index_letzter_knoten_kleiner_gleich(double u, const std::vector<double>& knoten){
      if(knoten.size() < 4 || u < knoten[3])
        return 3;
      std::size_t i = 3;
      // suche solange nicht ende und nächster Knoten nicht groesser u
      while(i<knoten.size()-1 && !(u < knoten[i+1]))
        ++i;
      return i;
    }
    


  • Vielen Dank für deine Mühe!
    Hat mir sehr weiter geholfen!



  • Furble Wurble schrieb:

    und die Vergleiche auf reine < (kleiner als) reduziert

    Bin mir fast sicher dass er nicht weiss wozu das gut sein könnte...


Anmelden zum Antworten