Große Datenmengen verarbeiten



  • Hallo Leute.

    Wenn ich in einer einfach verkette Liste mehrere 100 Einträge initialisieren will stürzt das Programm ab. Pro Eintrag in der Liste müssen 3 Single Werte rein.

    Mein Grund für die Liste war, dass ich alle 3 zusammengehörenden Werte beisammen habe. Außerdem ist sie einfacher zu hand haben als ein Dreidimensionales Array oder 3 Arrays mit einer Dimension.

    Gibt es eine bessere und effizientere Lösung als eine einfach verkettete Liste für dieses Problem?

    Danke schon mal im Voraus.



  • struct three_stooges
    {
        float m_larry;
        float m_moe;
        float m_curly;
    };
    
    std::vector<three_stooges> fump;
    // oder alternativ
    CArray<three_stooges> fopp;
    

    ?



  • Danke auf die Idee wär ich noch nicht gekommen. Werd ich mal probieren.



  • Irgendwie bekomm ich das mit dem Array nicht hin. Da ich diesen Teil auslagern möchte habe ich das in eine Klasse gesteckt.

    ref struct punkt {
    		Single xWert;
    		Single yWert;
    		Single zWert;
    	};
    
    ref class interpolieren
    {
    	array <punkt^> ^tabPunkte;
    	array <punkt^> ^punkteMuster;
    public:
    	interpolieren(void);
    	void tabEinlesen(array <Single> ^xWert, array <Single> ^yWert, array <Single> ^zWert);
    	Single tabAusgebenX(Int32 i);
    };
    
    interpolieren::interpolieren(void)
    {
    	array <punkt^> tabPunkte = gcnew array <punkt^>(0);
    	this->tabPunkte = tabPunkte;
    
    }
    
    void interpolieren::tabEinlesen(array <Single> ^xWert, array <Single> ^yWert, array <Single> ^zWert) {
    	for (Int32 i = 0; i < xWert->Length; i++) {
    		Array::Resize(this->tabPunkte,i+1);
    		this->tabPunkte[i]->xWert = xWert[i];
    		this->tabPunkte[i]->yWert = yWert[i];
    		this->tabPunkte[i]->zWert = zWert[i];
    	}
    }
    
    Single interpolieren::tabAusgebenX(Int32 i){
    	return this->tabPunkte[i]->xWert;
    }
    

    Bei der Funktion tabEinlesen tritt dann der Fehler auf. Sobald der xWert dem Array übergeben werden soll kommt die Fehlermeldung:

    **Eine nicht behandelte Ausnahme des Typs "System.NullReferenceException" ist in CNCPoint.exe aufgetreten.

    Zusätzliche Informationen: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.**

    Ich bin echt am verzweifeln.



  • Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt
    ich glaub der fehler liegt bei
    <punkt^>

    du musst fuer jedes element nochmal
    gcnew punkt() durchfuehren

    // pseudo

    this->tabPunkte[i] = gcnew punkt();
    

    BTW: das ist .Net/CLI



  • Danke jetzt funktionierst wunderbar. Ist zwar ein wenig kompliziert aber gut.

    Bin auch schon drauf gekommen das es eigentlich ins andere Forum gehört.



  • wuerde es nicht reichen statt

    array <punkt^> ^tabPunkte
    

    ,

    array <punkt> ^tabPunkte
    

    zu verwenden ?



  • nein da ich eine ref struct machen muss brauche ich das dach. ansonsten hättest du recht.



  • Lässt sich eine ref struct denn nicht in STL Container packen?



  • ref struct soweit ich weiss nicht - nur ohne ref



  • Ab VC9 (VS2008) gibt es die STL.NET; was eine .NET-Implementeirung einiger STL-Klassen ist. Sie ist auch schneller als die meisten .NET-Generics-Klassen 😉

    Siehe:
    http://www.developer.com/net/cplus/article.php/3524096
    http://blogs.msdn.com/vcblog/archive/2006/12/22/an-update-to-stl-clr-is-complete.aspx


Anmelden zum Antworten