list oder vector oder array oder ???
-
Was glaubst du wohl was schneller ist.
1.) alle Einträge einfügen und anschliessend (einmalig) sortieren oder.
2.) alle Einträge einzeln sortiert einzufügen.Ich dachte Geschwindigkeit sei das Hauptkriterium.
mfg JJ
-
John Doe schrieb:
Was glaubst du wohl was schneller ist.
1.) alle Einträge einfügen und anschliessend (einmalig) sortieren oder.Es muss ja nach jedem Einfügen sortiert werden. Die beiden Nearest-Neighbors jedes beliebigen x-Wertes müssen ja schnell interpoliert werden. Wenn du jetzt zwischen einem alten und einem eingefügten Punkt interoplieren willst, muss der eingefügte natürlich richtig einsortiert sein.
BSP.
1 2 7 8 9
3 4 5sollen "verschmolzen" werden.
3 einfügen (y von 3 wird aud 2 u. 7 interpoliert)
1 2 3 7 8 94 einfügen...
-> Spätestens hier muss die Liste wieder sortiert sein.Ein Array und ein einfaches Sortierverfahren (Bubblesort, bloss nicht Quicksort) nach jedem Schritt wäre eine Alternative.
-
Ich glaub wir verstehen die Aufgabe irgendwie nicht gleich.
Bis zur Klärung des Problems zieh ich mich hiermit zurückmfg JJ
-
Um alle Unklarheiten zu beseitigen (hoffentlich)...
Es handelt sich z.B. um folgende Datensätze (die tatsächlich ungleich lang sein können):
1.Datensatz:
100.0 0.5
100.5 1.0
101.1 2.3
101.7 3.02.Datensatz:
100.0 0.3
100.3 0.7
101.4 2.0Das ergibt z.B. 1.Datensatz minus 2.Datensatz:
100.0 0.2
100.3 -0.7
100.5 1.0
101.1 2.3
101.4 -2.0
101.7 3.0Ich hoffe, damit ist die Problemstellung klar.
Vielen Dank, dass meine Frage hier so umfangreich diskutiert wird.Zu dem ifstream-Vorschlag:
Habe zwar mit anderen Programmiersprachen schon etwas Erfahrung, aber mit C++ leider noch relativ wenig.
Dachte ifstream liest nur einzelne char's ein, oder liege ich da falschGrüße
Yvonne
-
John Doe schrieb:
Wie schon gesagt, wenn du nur ans Ende/Anfang anfügst ist ein vector schneller als
eine list.mfg JJ
Auuu, einfügen in einen vector am Anfang ist so ziemlich das langsamste was es gibt. Was du willst ist eine std::deque.
-
zu list:
list<x_und_y> lalaist das so gedacht
list<float float> ???zu deque:
wo finde ich ein Beispiel dazu außer im MSDN (finde ich nicht so ergiebig)?Grüße
Yvonne
-
Noch eine Anfängerfrage
wie bekomme ich die Zitate anderer eigentlich in so schöne Kästchen?
-
Yvonne schrieb:
Noch eine Anfängerfrage
wie bekomme ich die Zitate anderer eigentlich in so schöne Kästchen?
Einfach auf "Zitieren" geklickt und fertig.
zu "x_und_y" damit meine ich eine Datenstruktur, z.B. eine Klasse oder auch ein struct:
struct x_und_y { int x, y; };
x_und_y samplepoint;
samplepoint.x = 22;
samplepoint.y = 11;Edit: du wirst aber wohl eher eine Klasse "SamplePoint" brauchen, die auch eine Sortierreihenfolge definiert...
-
Yvonne schrieb:
Zu dem ifstream-Vorschlag:
Habe zwar mit anderen Programmiersprachen schon etwas Erfahrung, aber mit C++ leider noch relativ wenig.
Dachte ifstream liest nur einzelne char's ein, oder liege ich da falschJa, liegst du
ifstream kann nicht nur einzelne Zeichen einlesen sondern auch komplette Zeilen.
-
Informationen allgemein zur STL:
http://www.sgi.com/tech/stl/stl_index.html
Speziell deque:
http://www.sgi.com/tech/stl/Deque.html
mfg
v R
-
Danke für die Link's, gibt's so etwas auch für ifstream? - Komme damit noch nicht wirklich zurecht...
Grüße
Yvonne
-
Einen Link kenne ich jetzt nicht, aber nutz einfach mal die Forensuche und Sieh mal in der C++ FAQ nach. Da müsste sich einiges finden lassen
-
O.K.
zeilenweises einlesen habe ich jetzt gefunden
Aber wie komme ich an die einzelnen Werte - also x und y-Wert getrennt?
Gibt es dafür so etwas wie reguläre Ausdrücke, oder verlangsamt das das Ganze wieder sehr
???
:xmas2:
-
Yvonne schrieb:
Danke für die Link's, gibt's so etwas auch für ifstream? - Komme damit noch nicht wirklich zurecht...
Grüße
YvonneHier, schau dir mal das an:
http://www.cplusplus.com/ref/indexr.html
mfg
v R
-
Also, ich lese einen string ein, in dem eine Zeile mit den beiden Werten steht.
Da beide Werte durch mindestens ein Leerzeichen oder ein Tab getrennt sind (meistens werden die Werte aus einer EXCEL-Tabelle extrahiert), kann ich mit
getline(cin, datenstring, ' ');
den linken Wert (also den x-Wert) auslesen, aber wie komme ich an den Rechten?
Außerdem kriege ich auch Datensätze, wo zu Beginn einer Zeile auch noch Leerzeichen stehen können (vermutlich eine leere EXCEL-Spalte mitkopiert und in die .dat-Datei eingefügt). Wie vermeide ich da Fehler?
Grüße
Yvonne
-
Sorry, es geht ja doch!
Ich kriege die einzelnen Werte zurückgeliefert, warum ist mir aber nicht ganz klar, laut MSDN sollt es nur der jeweils erste Wert sein...
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcstdlib/html/vcsampsamplestringccgetlinestlsample.asp
-
Leider geht es doch nicht wirklich,
also hier mal mein Codeausschnitt (wobei fin mein ifstream ist):int i=0;
for (string ReadString; getline(fin,ReadString,' '); ){
i++;
if(i%2){
doubleList.push_back(ReadString);
}
}
fin.close();meine Testdaten:
x y
100 200
300 400was allerdings letztlich in der Liste steht ist:
100 und 400
(statt 100 und 300 wie ich erwartet hätte)
was mach ich falsch?Grüße
Yvonne
-
versuch mal
FILE *fp; fp = fopen("file.txt", "r"); for(int i1 = 0; i1 < numOfPoints; i1++) { double x, y; if(fscanf(fp, "%lf %lf", &x, &y) != 2) { cout << "Ooops, keine 2 Werte in einer Zeile" << endl; } // Speichere die Werte x und y irgendwie und irgendwo. }
-
Och nö, bitte nicht C schreiben.
Warum nicht einfach so?`
#include <iostream> #include <fstream> using namespace std; int main() { ifstream file("Dateiname"); double x, y; while(file) { file >> x >> y; // so Werte sind eingelesen und müssen nur noch eingefügt werden ´liste.push_back(make_pair(x,y)); // oder so ähnlich } }
-
Jester schrieb:
Och nö, bitte nicht C schreiben.
auch schön