vector Problem



  • Hallo,

    ich habe ein kleines Verständnisproblem.

    Ich besitze eine Vector Klasse, in dieser möchte ich meine mesh Objekte verwalten. Mit Vectoren habe ich bis dato kaum bis gar nicht zu tun gehabt.

    typedef OpenMesh::PolyMesh_ArrayKernelT<>  MyMesh;
    
    class VectorMesh
    {
    public:
    	VectorMesh(MyMesh mesh);
    	~VectorMesh(void);
    };
    

    Soweit so gut. An anderer Stelle legen ich dann einen Vector vom obigen Typ an und befülle ihn.

    Nun möchte ich ihn gerne wieder auslesen und auf die MeshObjekte zugreifen, dazu benutzte ich zunächst eine for Schleife:

    for(vector<VectorMesh*>::const_iterator meshiter=f->begin();
    		meshiter != f->end();++meshiter)
    

    Wie gelange ich jetzt aber an die Objekte. Egal wie ich bisher den Iterator eingestzt habe, bekam ich nur Fehlermeldungen.



  • (*meshiter)->MESHMENBER
    


  • Besten Dank 😋



  • [WinXP, Visual C++ 6.0, Win32 Consolenanwendung]

    Da ich auch eine Frage zur Vector-Class habe, stell ich die gleich hier um keinen neuen Thread aufmachen zu müssen 😉

    Wie verhält sich die Laufzeit von Vector zu New / delete.

    Hab das mal gemessen und verglichen (ganz simpel mit Integer)

    int N = 100000000;
    	clock_t start, end;
    
    	//++++++++++++++++++++++
    
    	start = clock();
    	vector <int> test1;
    	test1.reserve(N);
    	for (int i = 0; i < N; i++)
    		test1.push_back( i );
    	end = clock();
    	printf("Vector mit reserve: %i\n", end - start );
    
    	//++++++++++++++++++++++
    
    	start = clock();
    	int *test2 = new int[N];
    	for (int j = 0; j < N; j++)
    		test2[j] = j;
    	end = clock();
    	printf("New: %i\n", end - start );
    	delete [] test2;
    
    	//+++++++++++++++++++++
    
    	start = clock();
    	vector <int> test3;
    	for (int k = 0; k < N; k++)
    		test3.push_back( k );
    	end = clock();
    	printf("Vector ohne reserve: %i\n", end - start );
    
    	//++++++++++++++++++++++
    

    Ergebnisse (Optimierung war "/O2"):

    Vector mit reserve: 984
    New: 250
    Vector ohne reserve: 1390

    Frage kriegt man Vectoren noch schneller hin?



  • debug oder release mode ?

    Meep Meep



  • denke mal debug, weil ein vector ungefähr gleich schnell wie ein int array sein müsste



  • Wo stell ich das ein? (bin noch frisch bei VC6) 😉

    EDIT: habs hinbekommen, steht jetzt auf "Release", aber hat sich nicht gebessert.

    Projekt-Optionen sind:

    /nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"Release/foo.pch" /Yu"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c



  • It0101 schrieb:

    (bin noch frisch bei VC6) 😉

    Nimm lieber eine aktuelle Version, VC++ 2008 Express kannst du kostenlos herunterladen.

    Soweit ich weiss, sind std::vector und Co. schon weitgehend auf Performance optimiert. Viel kannst du da nicht mehr verschnellern. Das beste, das du wohl tun kannst, ist mit reserve genügend Speicher bereitstellen, und schauen, dass du Operationen wie insert und erase eher spärlich einsetzt. Und mit Iteratoren statt Indizes zu arbeiten trägt wahrscheinlich auch einen Teil zur Performance bei.


Anmelden zum Antworten