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 Referenzint CRunDlg::delete_blanks(vector<Tracedata> &vec, int nr, int pos)Möglichkeit 2:
Verwende den die at methodevec->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