einfache Frage Initialisierung



  • Ich möchte, dass das Array arr[4][8] des Hauptprogramms an die Klasse übergeben wird. Der Speicher wird im Konstruktor allokiert, aber wie übergebe ich den Inhalt?

    Danke.

    #include <iostream>
    #include <vector>
    using namespace std;
    
    class array
    {
    public:
    	array(int, int, ???);
    private:
    	vector< vector<float> >m_arr;
    };
    
    array::array(int z, int s, ???) : m_arr(z)
    {
    	m_zeilen = z;
    	m_spalten = s;
    	for (int i = 0; i < m_zeilen; i++)
    		m_arr[i].resize(m_spalten);
    }
    
    int main()
    {
    	float arr[4][8] = 
    	{
    		   1.33333333f,    2,    3, 1, 0, 0, 0,   1200,
    		   2.91666666f,    4,    4, 0, 1, 0, 0,   2000,
    		   3,              3,    9, 0, 0, 1, 0,   3000,
    		-160,           -180, -400, 0, 0, 0, 1, -88000
    	};
    	array a(4, 8, arr); //???
    	return 0;
    }
    


  • indem du einen linearen Array übergibst und von diesem in den Zweidimensionalen Array kopierst.



  • ja, danke. Ein Stückchen Code könnte mir hier gut helfen 😋



  • Das wäre jetzt der Part, bei dem TGGC kommt und den "Bitte Lesen"-link postet 😃

    So kannst du es machen:

    void CopyToMatrix (int *lin_array, int size)
    {
    	const int row=4;
    	const int column=4;
    	if (size!=row*column) return;
    
    	int Matrix[row][column];
    	int CurPos=0;
    	for (int i=0; i<row; i++)
    		for (int x=0; x<column; x++, CurPos++)
    			Matrix[i][x]=lin_array[CurPos]; 
    
    }
    

    Der übergebene lineare Array muss natürlich entsprechend angepasst sein. Das heißt wenn du (wie in dem Beispiel) eine 4x4 Matrix hast, dann sind die ersten vier elemente des lienaren Arrays die elemente der ersten Zeile. von 4-8 ist es die zweite Zeile, usw...



  • Danke.

    Ich machs jetzt aus diversen Gründen mit einem Vector.
    Doch warum gibts hier einen Absturz?

    #include <iostream>
    #include <vector>
    using namespace std;
    
    int main()
    {
    	int z = 2, s = 2;
    
    	vector<vector<float> >arr;
    	for (int i = 0; i < z; i++)
    		arr.resize(s);
    
    	arr[0][0] = 10.4f; //hier knallts
    
    	return 0;
    }
    


  • guckst du FAQ



  • vielleicht arr[z].resize(s); ?



  • Hallo Randa, danke.
    Ich habs jetzt nochmal ganz konkret gemacht.
    Meine Frage: Wie übergebe ich temp mit Inhalt so an simplex,
    dass m_arr sich die Werte von temp reinschaufeln kann?

    #include <iostream>
    #include <vector>
    using namespace std;
    
    class array
    {
    private:
    	int m_zeilen, m_spalten;
    	vector<vector<float> >m_arr;
    public:
    	array(int, int); //Zeilen, Spalten
    };
    
    array::array(int z, int s, float ???*arr) : m_arr(z)
    {
    	m_zeilen = z;
    	m_spalten = s;
    	for (int i = 0; i < m_zeilen; i++)
    		m_arr[i].resize(m_spalten);
    	//hier soll das Füllen von m_arr mit den Werten von temp vorgenommen werden
    	for (int a = 0; a < m_zeilen; a++)
    		for (int b = 0; b < m_zeilen; b++)
    
    }
    
    int main()
    {
    	int z = 2, s = 2;
    
    	vector<vector<float> >temp(z);
    	for (int i = 0; i < z; i++)
    		temp[i].resize(s);
    
    	temp[0][0] = temp[0][1] = temp[1][0] = temp[1][1] = 2.3f; 
    
    	simplex s(z, s, arr); //wie übergebe ich jetzt temp mit Inhalt so an array,
    	//dass m_arr sich die Werte von temp reinschaufeln kann? 
    
    	return 0;
    }
    


  • Hi,
    Wie ich das jetzt verstanden hab, willst du ein zweidimensionales Array in ein anderes zweidimensionales Array kopieren. Wo ist das Problem? Mach das mit zwei for-schleifen, die jedes Element des einen Arrays ins andere kopiert.

    Edit: Das muss übrigens heißen

    for (int a = 0; a < m_zeilen; a++) 
             for (int b = 0; b < m_[b]spalten[/b]; b++)
    


  • Hier habe ich jetzt nur noch einen Fehler, ist das sonst alles ok?
    Danke euch cracks hier!

    #include <iostream>
    #include <vector>
    using namespace std;
    
    class array
    {
    private:
    	int m_zeilen, m_spalten;
    	vector<vector<float> >m_arr;
    public:
    	array(int, int, float*); //Zeilen, Spalten
    };
    
    array::array(int z, int s, float *arr) : m_arr(z)
    {
    	m_zeilen = z;
    	m_spalten = s;
    	for (int i = 0; i < m_zeilen; i++)
    		m_arr[i].resize(m_spalten);
    
    	//hier soll das Füllen von m_arr mit den Werten von temp vorgenommen werden
    	for (int a = 0; a < m_zeilen; a++)
    		for (int b = 0; b < m_zeilen; b++)
    			;//jetzt zuweisen
    }
    
    int main()
    {
    	int z = 2, s = 2;
    
    	vector<vector<float> >temp(z);
    	for (int i = 0; i < z; i++)
    		temp[i].resize(s);
    
    	temp[0][0] = temp[0][1] = temp[1][0] = temp[1][1] = 2.3f; 
    
    	array a(z, s, temp); //FEHLER
    
    	return 0;
    }
    


  • du solltest ein paar sekunden überlegen, bevor du erwartest das du alles vorgesetzt bekommst. Es ist falsch, in beiden schleifen m_zeilen stehen zu haben. es muss in der ersten m_zeilen und in der zweiten m_spalten heißen. überleg mal warum...
    Noch ein kleiner Tip:

    [b]vector<vector<float> >[/b]  temp(z);
    
    //[...]
    
    array::array(int z, int s, [b]float[/b] *arr) : m_arr(z)
    

    na, klingelts?



  • Ich bin nicht der Meinung, dass ich irgend etwas vorgesetzt bekommen will. 99% des Codes sind von mir. Vielleicht ein paar postings zu viel, aber bin neu hier.
    Jedoch danke für deine Antworten. So viel haben sie mir bisher aber nicht gebracht, ich hänge noch immer an der Übergabe, d. h. wie die Übergabeparameter aussehen müssen.
    Diese Zeile

    array a(z, s, temp);
    

    wird neben dieser hier

    m_arr[a][b] = temp[a][b];
    

    nicht compiliert und ich habe keine Ahnung, warum.

    Hier jetzt das aktuelle Gerüst

    #include <iostream>
    #include <vector>
    using namespace std;
    
    class array
    {
    private:
    	int m_zeilen, m_spalten;
    	vector<vector<float> >m_arr;
    public:
    	array(int, int, float*); //Zeilen, Spalten
    };
    
    array::array(int z, int s, float *temp) : m_arr(z)
    {
    	m_zeilen = z;
    	m_spalten = s;
    	for (int i = 0; i < m_zeilen; i++)
    		m_arr[i].resize(m_spalten);
    
    	//hier soll das Füllen von m_arr mit den Werten von temp vorgenommen werden
    	for (int a = 0; a < m_zeilen; a++)
    		for (int b = 0; b < m_spalten; b++)
    			m_arr[a][b] = temp[a][b];
    }
    
    int main()
    {
    	int z = 2, s = 2;
    
    	vector<vector<float> >temp(z);
    	for (int i = 0; i < z; i++)
    		temp[i].resize(s);
    
    	temp[0][0] = temp[0][1] = temp[1][0] = temp[1][1] = 2.3f; 
    
    	array a(z, s, temp);
    
    	return 0;
    }
    


  • grapefruit schrieb:

    So viel haben sie mir bisher aber nicht gebracht

    Das liegt daran das du nicht wirklich selber nachdenkst.

    vector <vector<float > > [b]!=[/b] float!
    

    ich gehe jetzt mal spontan nicht davon aus, das do so am Anfang stehst, das du nicht weißt, das vector und float nicht die gleichen datentypen sind. Hast du mal die Compiler-Fehlermeldung gelesen? Das ist elementarer Stoff.
    Wenn du doch ein absoluter Anfänger bist, dann sei dir gesagt, das float und vector nicht die gleichen Datentypen sind 😉
    Du musst in der Parameterliste die gleichen Datentypen stehen haben.



  • Hallo Randa, 👍

    jetzt erst ist der Groschen gefallen!!!

    Dank dir läuft es jetzt:

    array::array(int z, int s, vector<vector<float> >temp) : m_arr(z)
    

    Natürlich kenne ich den Unterschied zwischen Containern und dem Standarddatentyp float.
    Ich habe wohl nicht wirklich richtig nachgedacht <schluck>.

    Danke! 🙂


Anmelden zum Antworten