Vektorlänge abhängig von einer Variable definieren?



  • hallo zusammen,

    ich bin ein Neuling in C++, würde lieber das ganze in Matlab programmieren. Doch bei meiner Bachelorarbeit muss ich zwingend die Sachen in C++ umsetzen und da kenn ich mich überhaupt nicht aus. Ich hoffe Ihr könnt mir weiterhelfen.

    Ich schreibe gerade eine Funktion:

    #include <vector>
    #include <cmath>
    /* 
    	index:		Der Index des Intervalls, in dem u liegt
    	u:			der Wert, für diesen der Funktionswert der Splinekurve ausgerechnet werden soll
    	knoten:		Knotenvektor
    	kontroll:	Kontrollpunktvektor
    	Grad n:		3
    */
    
    double deboor (int index, int grad, double u, const std::vector<double>& kontroll, const std::vector<double>& knoten)
    {
    	int i=0, k=0;
    
    	std::vector<double> d[grad][kontroll.size()];
    
    	if (u < knoten[0] || u > knoten[knoten.size()-1])	// Wenn u außerhalb Knotenfolge, dann funktionswert=0
    		return 0;
    
    	for (i=index-grad; i <= index; i++)
    	{
    		d[0][i] = kontroll[i];
    	}
    
    	for (k=1; k <= grad; k++)
    	{	
    		for (i = index-grad+k; i <= index; i++)
    		{
    			d[k][i] = (knoten[i+grad+1-k] - u)/(knoten[i+grad+1-k] - knoten[i]) * d[k-1][i-1] 
    					+ (u-knoten[i])/(knoten[i+grad+1-k] - knoten[i]) * d[k-1][i];
    		}
    	}
    
    	return (d[k-1][i-1]);
    }
    

    Ich möchte den 2.dim Vektor d so definieren, dass dieser die Länge "grad" und "kontroll.size()" hat. Wie muss ich meinen Code ändern?

    Außerdem wie könnte man mein Programm bzgl. Geschwindigkeit noch verbessern?

    Vielen Dank im Voraus!


  • Mod

    Dann bau doch einen jagged vector:
    Syntax nicht geprüft:

    typedef std::vector<int> INNEN;
    typedef std::vector<INNEN> AUSSEN;
    

    Warum willst Du den hier wieder einen C/C++ Vector nehmen.



  • meinst du man kann den Vektor auch anders definieren? z.B

    double d[grad][kontroll.size()-1]
    

    Doch so funktioniert es auch nicht


  • Mod

    skyforce schrieb:

    meinst du man kann den Vektor auch anders definieren? z.B

    double d[grad][kontroll.size()-1]
    

    Doch so funktioniert es auch nicht

    Nein. Das meine ich nicht.
    Ich meine Du sollst zwei std::vector ineinander verschachteln, wie ich es Dir mit den typedefs gezeigt habe.


Anmelden zum Antworten