2d vector, mehrdimensional



  • LOL 😃

    brauchst mir nicht nen ganzen Roman schreiben.. 😃 🤡

    ich würde das so in die richtung machen:

    typedef enum TRACE_DATA_TYPE {
        td_type_title, 
        td_type_command,
        td_type_press,
        td_type_traffic
    }TRACE_DATA_TYPE;
    
    typedef struct Tracedata_item {
        TRACE_DATA_TYPE type;
        CString value;
    }Tracedata_item;
    
    typedef struct Tracedata {
       std::vector<Tracedata_item> items;
    }
    

    jetzt kannst du dir dein Tracedata mit beliebigen daten vollstpofen 😉

    Tracedata_item tmp_item;
    std::vector<Tracedata> vec;
    
    Tracedata data1;
    tmp_item.type = td_type_title;
    tmp_item.value = "bla";
    data1.items.push_back(tmp_item); // das ist der title
    tmp_item.type = td_type_command;
    tmp_item.value = "bla";
    data1.items.push_back(tmp_item); // das ist das command
    vec.push_back(data1); // und speichern
    
    Tracedata data2;
    tmp_item.type = td_type_title;
    tmp_item.value = "bla";
    data2.items.push_back(tmp_item); // das ist der title
    tmp_item.type = td_type_press;
    tmp_item.value = "bla";
    data2.items.push_back(tmp_item); // das ist die taste
    tmp_item.type = td_type_traffic;
    tmp_item.value = "bla";
    data2.items.push_back(tmp_item); // das ist ... 1
    tmp_item.type = td_type_traffic;
    tmp_item.value = "bla";
    data2.items.push_back(tmp_item); // das ist ... 2
    vec.push_back(data2); // und speichern
    
    ....
    


  • danke werd ich mir mal anschauen

    nur hab ich ein prob das ich die dinger schon gemacht habe ( die speicherungen ) und war echt viel code weil ich nicht einfach reinspeichere sondern verglecihe ect. machen muss das es passt.

    war viel arbeit

    jetzt koennte ich ich ja deine lsg nehmen und dann meine vec struct deleten. und dann damit arbeiten. sieht bissle kommpl aus bei dir. hmmm

    geht auch die lsg

    was meinst dazu??

    struct Tracedata
    {
        CString titel;
        vector<CString> press;
        vector<CString> command;
        vector<int> count;
    
    };
    

    jetzt kann ich entweder

    fall 1:

    titel + commands haben und dann habe ich nur titel + commands

    und wenn der vec press > 0 ist dann weiss ich

    zu press[0] gehoeren count[0] = 3 ; daten ( z.b. erste 3 werte von commandos )

    und bei press[1] gehoeren bei count[1] = 5 die nachsten 5 elemente in commandos

    wenn press == 0 dann geh ich nur die commandos zum titel durch

    was meinste dazu?

    1 fall: titel 1 und 10 commandos

    2 fall: titel 1 und 10 commandos und 2 press und 2 counts

    hmmmm

    aber hab dank fuer deine arbeit



  • kannst du auch machen, wird das sicher fehleranfällig, da du da über 3 vectoren kreuz und quer schreiben/lesen/vergleichen musst.. irgendwo ein push_back vergessen und schon ist dein ganzer vector schrott..



  • eine frage

    warum geht das nicht

    z.b.

    struct Tracedata
    {
    	CString titel;
    	vector<CString> command;
    
    };
    
    vector<Tracedata> m_trace_vec
    
    // und dann im prog
    
    m_trace_vec[pos].titel.push_back(str);
    
    // oder
    
    m_trace_vec[pos].command[index].push_back(str);
    

    ich habs bis jezt immer so gemacht, dass ich ein resize ( ein element mehr ) gemacht habe und dann halt reingespeichert. ist aber nicht so toll die methode.

    und bitte nur konstruktive beitreage( mal gespannt wer den satz gelesen hat ). merci im voraus



  • m_trace_vec[pos].titel.push_back(str);

    CString hat keine push_back Methode.

    m_trace_vec[pos].command[index].push_back(str);

    Und noch mal, CString hat keine push_back Methode. 🤡

    denke mal du willst so was machen:

    Tracedata data;
    data.title = str;
    data.command.push_back(str);
    m_trace_vec.push_back(data);
    


  • jep genau so

    aber das mit CString versteh ich nicht.

    denn ich hab auch einmal

    vector<CString> m_Testsuite_text;
    
    //...
    m_Testsuite_text.push_back(Strx);
    

    das geht bei mir, ist aber CString. hmmm

    jetzt werd ich wohl umaendern mussen und so machen wie du es gezeigt hast, da mit resize halt doch etwas fusch ist, oder?



  • CMatt

    einmal braucht ich dich noch

    oder jemand anders wer es weiss

    wie uebergebe ich einen vector? bei mit klappt das nicht

    hier mein fall

    // Tracedata ist ein String und ein weiterer String vector
    
    int CRunDlg::delete_blanks(vector<Tracedata> *vec, int nr, int pos)
    {
    	for( int i = 0; i < vec[nr].command[pos_com].GetLength(); i++)  // command ist not a member bla bla bla
    	{		
    
    		if( vec[nr].command[pos_com].Mid(i,1) == " " )
    		{
    			vec[nr].command[pos_com].Delete(i,1);
    
    		}				
    	}
              // er schlagt mir nicht bei vec[nr].  z.b das command vor
             // auch nicht bei vec[nr]->  hier schlaegt er mir auch nichts vor
    
    	return 0;
    }
    

    wie mache ich das jetzt, einen vector uebergeben und dann sachen drin zu verandern? dank allem im voraus



  • natuerlich hab ich die sachen geandert, mit

    if( vec[nr].command[pos].Mid(i,1) == " " )
    		{
    			vec[nr].command[pos].Delete(i,1);
    
    		}
    

    nicht das einer denkt, dass es daran lag



  • int CRunDlg::delete_blanks(vector<Tracedata> *vec...

    Du übergibst hier nen Zeiger auf nen Vector, also die Addresse wo deine vector-klasse im Ram liegt. vec[nr] greift jetzt also auf den vector zu, der an der übergeben Adresse + sizeof(std::vector<Tracedata>)*nr liegt und da liegt mit ziehmlich sicherheit was, nur kein std::vector<Tracedata> ==> crash.
    Möglichkeit 1:
    Übergib ne Referenz

    int CRunDlg::delete_blanks(vector<Tracedata> &vec, int nr, int pos)
    

    Möglichkeit 2:
    Verwende den die at methode

    vec->at(x)...
    

    aber das mit CString versteh ich nicht.

    vector<CString> m_Testsuite_text;
    
    //...
    m_Testsuite_text.push_back(Strx);
    

    m_Testsuite_text ist eine Variable vom typ vector, die hat ne push_back methode.

    vector<Tracedata> m_trace_vec
    // und dann im prog
    m_trace_vec[pos].titel.push_back(str);
    

    m_trace_vec ist vom typ vector, dort verwendest du nen []oprator um auf ein element zuzugreifen, ist ok. Das im element greifst du nun auf titel zu, welches vom typ CString ist und willst push_back aufrufen -> geht net, CString hat keine push_back methode.



  • ja klar, es klappt

    klar referenzen sollen immer besser sein anscheinend

    ein buchstabe und dann so ne wirkung

    merci merci

    hab beschlossen, dass du mein lieblingsmember hier bist

    jetzt checks ich es auch, danke


Anmelden zum Antworten