Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++ 3er-Vector behandeln.



Nuke
14-11-2004, 14:32
Hi.

Ich brauche einen 3fachen dynamischen integer Array. Jetzt dachte ich mir, das ich ja einen

vector<vector<vector<int> > >

nehmen könnte.

Nun habe ich mal testweise etwas geschrieben was auch funktioniert. Nun wollte ich fragen, ob das so in Ordnung geht, auch im Bezug auf das aufräumen am Ende. :)



#include <iostream>
#include <vector>

std::vector< std::vector< std::vector<int> > > ende;

int main()
{
std::vector<std::vector<int> > mitte;

std::vector<int> Wert;

Wert.push_back(10);
Wert.push_back(13851);

mitte.push_back(Wert);

ende.push_back(mitte);

std::cout << ende[0][0][0] << std::endl;
std::cout << ende[0][0][1] << std::endl;
std::cout << ende[0][0].size() << std::endl;

ende[0][0].clear();
ende[0].clear();
ende.clear();

return 0;
}


Das gibt mir wie gewünscht

10
13851
2

aus. Ist das so i.O.? Ich frage nur, weil ich mit solchen Arrays zum ersten mal arbeite.

Danke. :)

panzi
14-11-2004, 15:16
Folgender Code macht das gleiche wie deiner, nur legt es die "Hilfsobjekte" implizit an und deletet sie schon nach dem konstruktoraufruf.
Die .clear() aufrufe blrauchst du NICHT machen. Der destruktor kümmert sich schon um's Aufräumen, und der wird beim Zerstören des Objektes aufgerufen (am ende des scopes bei nicht dynamischen Objekten, wie hier. also beim } ).

#include <vector>
#include <iostream>

using namespace std;

int main( void ) {
int input[] = { 10, 13851 };
vector< vector< vector< int > > > werte( 1, vector< vector< int > >( 1, vector< int >( input, input + 2 )));

/*
// oder:
vector< vector< vector< int > > > werte( 1, vector< vector< int > >( 1, vector< int >()));
werte[ 0 ][ 0 ].push_back( 10 );
werte[ 0 ][ 0 ].push_back( 13851 );

// oder:
vector< vector< vector< int > > > werte( 1, vector< vector< int > >( 1, vector< int >()));
vector< int > & ref = werte[ 0 ][ 0 ];

ref.push_back( 10 );
ref.push_back( 13851 );
*/

cout << werte[ 0 ][ 0 ][ 0 ] << endl
<< werte[ 0 ][ 0 ][ 1 ] << endl
<< werte[ 0 ][ 0 ].size() << endl;

return 0;
}