copy bei vector funktioniert nicht
-
Hallo zusammen
mein Problem sieht folgendermassen aus:
else if(szBuffer.find("*:",0) != string::npos) { szBuffer.erase(pos1,2); vector<double>::size_type size = iAlphaSize; vAlphas.reserve(iAlphaSize); istream_iterator<double> pos1(file); // Anfangsiterator auf die Datei istream_iterator<double> end; // Enditerator copy(pos1,end,back_inserter(vAlphas)); file.clear(); }Wenn ich das so mache steht leider nachher in meinem vector nichts drin. Woran liegt das? Fuer double existiert doch schon ein istream_operator.
Danke fuer eure Hilfe
-
Geht das Programm überhaupt in diesen Abschnitt? (bzw. was genau steht denn in der Eingabedatei bzw. in szBuffer?)
PS: Du verwendest zwei Variablen mit dem Namen pos1 - die eine ist ein Index im String, die andere dein Eingabe-Iterator.
-
In der Eingabedatei steht sowas:
alphaScale: 0
alphaSize: 449
//:2.26544 -0.0581018 1.63505 -0.0860993 1.54123 -0.0408982 1.03173 -0.057951 1.90069 -0.103795 0.893264 -0.126674 0.0978851 -0.068188 1.33884 -0.0797202 1.71204 -0.0560137 1.92548 -0.0885353 0.430581 -0.109265 1.81014 -0.124152 0.527464 -0.0859725 0.608787 -0.0674382 0.896461 -0.111557 0.991913 -0.118861 2.51753 ....................................Und der Buffer scheint laut meinem Debug auch die Zahlen einzulesen. Aber er macht das copy scheinbar nicht.
-
In dem Fall ist dein Suchstring falsch - und das Programm geht niemals in den Anweisungsblock rein (string::find() unterstützt keine reulären Ausdrücke, also suchst du nach der Zeichenfolge 'Stern' 'Doppelpunkt').
-
aber wenn ich diesen Code hier ausfuehre funktionierts:
else if (szBuffer.find("#:",0) != string::npos) { szBuffer.erase(pos1,2); vector<PointN>::size_type size = iBaseSize; vBasePoints.reserve(size); istream_iterator<PointN> pos1(file); // Anfangsiterator auf die Datei istream_iterator<PointN> end; // Enditerator copy(pos1,end,back_inserter(vBasePoints)); vBasePoints.clear(); file.clear(); }und der ist nur zwei if-bloecke vorher. Jetzt verstehe ich halt nicht warum es das eine Mal tut und das andere Mal nicht. Zumal ich fuer diesen Teil hier ja meine istream_operatoren selbst schreiben musste
-
Setz doch einfach mal einen Breakpoint auf das if - und schau nach, was GENAU in der Variablen "szBuffer" drinsteht. (der Debugger kann unheimlich hilfreich sein, wenn es um die Frage "warum macht mein Programm nicht, was es soll?" geht.
-
ich debugge das Programm ja schon die ganze Zeit. Daher weiss ich ja was in meinem Buffer drinsteht. Aber ich poste es auch ganz gerne nochmal. Mein Buffer beinhaltet:
+ _Ptr 0x00932190 "2.26544 -0.0581018 1.63505 -0.0860993 1.54123 -0.0408982 1.03173 -0.057951 1.90069 -0.103795 0.893264 -0.126674 0.0978851 -0.068188 1.33884 -0.0797202 1.71204 -0.0560137 1.92548 -0.0885353 0.430581 -0.109265 1.81014 -0.124152 0.527464 -0.0859725 0.608787 -0.0674382 0.896461 -0.111557 0.991913 -0.118861 2.51753 -0.125427 1.18846 -0.0835979 0.253864 -0.0686017 -0.0645325 1.42594 -0.0485013 2.01892 -0.0357111 0.775909 -0.10186 0.918793 -0.0799385 1.55584 -0.13235 1.08604 -0.109523 2.0363 -0.112434 1.69881 -0.100993 1.41126 -0.134916 0.578852 -0.120765 2.32543 -0.115104 0.88317 -0.0859018 1.92189 -0.0436902 1.69424 -0.128014 1.77557 -0.0239499 0.580654 -0.0671771 -0.00747349 -0.105051 1.79178 -0.0516218 1.30581 -0.101441 0.22762 -0.0870453 1.1729 -0.125453 1.74801 -0.0943731 0.829034 -0.0440951 0.970039 -0.0495376 1.18546 -0.115395 0.856973 -0.0850508 1.62815 -0.0508084 1.26949 -0.117893 1.10889 -0.0602874 0.0873758 -0.0872659 1.65353 -0.134877 1.1229 -0.058617 1.27774 -0.108421 1.02722 -0.0902843 0" char *
Das heisst da stehen die Werte die ich will auch drin. Warum werden sie dann nicht in meinen Vektor kopiert?
-
samo schrieb:
+ _Ptr 0x00932190 "2.26544 -0.0581018 1.63505 -0.0860993 1.54123 -0.0408982 1.03173 -0.057951 1.90069 -0.103795 0.893264 -0.126674 0.0978851 -0.068188 1.33884 -0.0797202 1.71204 -0.0560137 1.92548 -0.0885353 0.430581 -0.109265 1.81014 -0.124152 0.527464 -0.0859725 0.608787 -0.0674382 0.896461 -0.111557 0.991913 -0.118861 2.51753 -0.125427 1.18846 -0.0835979 0.253864 -0.0686017 -0.0645325 1.42594 -0.0485013 2.01892 -0.0357111 0.775909 -0.10186 0.918793 -0.0799385 1.55584 -0.13235 1.08604 -0.109523 2.0363 -0.112434 1.69881 -0.100993 1.41126 -0.134916 0.578852 -0.120765 2.32543 -0.115104 0.88317 -0.0859018 1.92189 -0.0436902 1.69424 -0.128014 1.77557 -0.0239499 0.580654 -0.0671771 -0.00747349 -0.105051 1.79178 -0.0516218 1.30581 -0.101441 0.22762 -0.0870453 1.1729 -0.125453 1.74801 -0.0943731 0.829034 -0.0440951 0.970039 -0.0495376 1.18546 -0.115395 0.856973 -0.0850508 1.62815 -0.0508084 1.26949 -0.117893 1.10889 -0.0602874 0.0873758 -0.0872659 1.65353 -0.134877 1.1229 -0.058617 1.27774 -0.108421 1.02722 -0.0902843 0"
Da steht aber kein "*:" drin. (wie gesagt, bist du dir sicher, daß das Programm überhaupt in den if()-Zweig reingeht?)
PS: Wenn du schon deine gesamte Zahlenliste in den Buffer gelesen hast, steht der Lesezeiger der Datei am Ende der Liste, also liest das copy() die nächste Zeile deiner Datei.
-
Da steht aber kein "*:" drin. (wie gesagt, bist du dir sicher, daß das Programm überhaupt in den if()-Zweig reingeht?)
PS: Wenn du schon deine gesamte Zahlenliste in den Buffer gelesen hast, steht der Lesezeiger der Datei am Ende der Liste, also liest das copy() die nächste Zeile deiner Datei.
Ja, da steht deshalb kein "*:" drin weil ich das loesche.
else if(szBuffer.find("//:",0) != string::npos) { -> szBuffer.erase(pos1,3); vector<double>::size_type size = iAlphaSize; vAlphas.reserve(iAlphaSize); .......Was mich eben stoert ist dass ich genau das gleiche mache wie oben auch, also mit meinen Points, es da auch funktioniert, nur jetzt hier mit den double ploetzlich nicht mehr, und das kann ja eigentlich nicht sein. Wenn es wirklich so ist dass er das alles in seinen Buffer einliest und dann gar nicht das was er eingelesen hat sondern die naechste Zeile einliest, wie muss ich das dann machen? Meinen Marker, also das *: lassen und meine Daten in die naechste Zeile packen?
-
Entweder du liest von vornherein nur soviel, wie du zur Erkennung tatsächlich benötigst (sprich: zeichenweise bis zum ":"), du setzt deinen Lesezeiger wieder zurück (mit file.seekg(-szBuffer.size(),ios_base::cur);) oder du jagst deinen Puffer durch einen stringstream - such dir's aus.