datenspeicherung: dynamische arrays? vectoren?



  • hallo, wie kann ich große Datenmengen (ca. 400.000-500.000 doubles) speichern?

    bisher hat nichts so richtig funktioniert, was ich versucht habe (allerdings war das meiste qt-zeug wie QArray; bei vector<double> weiss ich nicht, wie ich das korrektt machen soll - die datenstruktur muss auch an eine andere klasse weitergegeben werden können).

    also wenn ihr mir helfen könnt, wäre das gut. aber bitte konkrete codebeispiele, nicht so: da musst du XXX nehmen und dies und jenes damit machen. 😉

    Marrt



  • da kannst du einen std::vector nehmen.

    std::vector<double> myVec;
    myVec.push_back(1.0);
    double ret = myVec[0];
    
    void myFunc(std::vector<double> &v)
    {
        // vorsicht, adresse genommen!
        v[0] = 2.2;
    }
    

    wo ist das problem?



  • also wenn ich mir das forum hier so angucke, scheint das probate mittel ja der vector<double> zu sein. versucht hatte ich es mit ihm ja auch schon mal ..

    wie muss ich den vector genau definieren?

    -> jede klasse, die den vektor benutzt, muss #include<vector> haben?
    -> das using namespace std muss zwischen den includes und der klassendefinition stehen?
    -> und das bei jeder klasse?

    und dann kann ich den vector übergeben?

    danke, Marrt



  • Zum Beispiel so:

    #include <qvaluevector.h>
    
    int main()
    {
       QValueVector<double> vec(500000);
       for (int i = 0; i < 500000; ++i)
       {
          vec[i] = i;
       }
    }
    


  • namecpaces und include sachen liest du am besten in der faq oder in deinem buch nach. zur klasse:

    #include <vector>
    
    class myClass
    {
    public:
        myClass()
        {
            m_values.size(100); // optional: vorinitialisieren
        }
    
        std::vector<double> m_values;
    };
    
    ...
    
    myClass bla;
    bla.m_values.push_back(1.0);
    bla.m_values.push_back(25.0);
    
    ...
    
    std::vector<double> *pVec = &(myClass.m_values); // sollte man allerdings so nicht machen :)
    pVec->push_back(1.0);
    double elem = (*pVec)[2];
    

    was ist genau dein problem?


Anmelden zum Antworten