über zwei vectoren gleichzeitig iterieren?
-
Hallo, ist es möglich in einer for-schleife über zwei vektoren zu iterieren(also mit iteratoren) so dass immer der n-te eintrag beider vektoren in jedem schleifendurchgang angefasst werden. also das was man mit
for(int i = 0 ; i < size_of_both_vectors ; ++i){ ..v_1[i].. ; ... v_2[i]..; }hätte.
-
Nicht das ich wüsste. Hast du einen spezifischen Grund, warum du es so machen musst?
-
Sicher, zumindest solange die Vektoren vom gleichen Typ sind und die gleiche Größe haben:
for (auto it=vec.begin(),it2=vec2.begin();it!=vec.end();++it,++it2)
-
nun, ich hab n m lange datensätze und das k mal. und für verschiedene auswertungen brauch ich die in verschieden reihenfolgen . geschachtelt...
-
ach, perfekt, sowas hab ich gesucht, was macht den das auto?
-
Definiere "Gleichzeitig":
Gleichzeitig im Sinne von Threading?
Gleichzeitig im Sinne der Syntax?EDIT: Auto ist automatische Typerkennung. So musst du nicht
vector<T>::iteratorschreiben, weil der Compiler das für dich erkennt.
-
wenn man das nicht gewusst hat und immer ausgeschrieben hat fühlt das sich wie betrug an. keine nachteile?
-
M10n schrieb:
wenn man das nicht gewusst hat und immer ausgeschrieben hat fühlt das sich wie betrug an. keine nachteile?
Nicht soweit ich weiss.
EDIT: Doch, du kannst nicht auf eine auto Variable casten, typeid oder sizeof verwenden.
-
IrgendeinName schrieb:
M10n schrieb:
wenn man das nicht gewusst hat und immer ausgeschrieben hat fühlt das sich wie betrug an. keine nachteile?
Nicht soweit ich weiss.
Gab einen Thread dazu.
-
TravisG schrieb:
Nicht das ich wüsste. Hast du einen spezifischen Grund, warum du es so machen musst?
Genau!
Halt mal nicht so hinter dem Berg mit dem eigentlichen Problem. Evtl. gibt es auch einen fertigen Algorithmus.
-
oke, werd ich mal suchen...
direkte folgefrage:
warum kann ich in einer template-funciton sowas nicht machentemplate<class T> void mean_deviation(const std::vector<T> & data , T & mean , T & deviation ) { ... for(std::vector<T>::iterator current_data_point = data.begin(); current_data_point != data.end() ; ++ current_data_point){ .. } ...also der iterator kann so nicht da stehen....
-
da fehlt ein typename:
typename std::vector<T>::iterator
-
Weil der Compiler nicht weiß, ob
iteratoreine Funktion oder ein Typ ist. Dastd::vector<T>::iteratorhier von T abhängig ist, ist es ein dependent name/type.Da der Compiler nun nicht weiter weiß, nimmt er an, dass
iteratoreine Membermethode ist. Was in einen Compiler-Fehler resultiert.Lösung:
Davor muss also ein**typename**(was genau das zurechtbiegt).
-
vielen Dank ,
auch das muss ich zu meiner schande gestehen wusste ich einfach nicht...
heisst das jeder vom template abhängige typ muss nach typedef stehen?
-
M10n schrieb:
heisst das jeder vom template abhängige typ muss nach typedef stehen?
Du meinst
typename.Ja.
-
ahh , perfekte erklärung, typename also. Vielen Dank, werde ich nicht mehr vergessen.

-
Nimm doch bitte einfach auto...
-
Kellerautomat schrieb:
Nimm doch bitte einfach auto...
wenn dein Compiler C++11 kann und es aktiviert ist.
-
Mir ist kein Commpiler bekannt, der auto nicht schon hat...
-
Kellerautomat schrieb:
Mir ist kein Commpiler bekannt, der auto nicht schon hat...
Und wie ist es bei dir mit Versionen?
-
Wie meinen?