Fragen zu Vector
-
Hallo!
Ich habe zwei Fragen:
1. Sind die Einträge, die man in einen Vector schreiben kann begrenzt? (Jetzt mal abgesehen von meiner RAM und Festplattenkapazität)2. Wenn ich auf den Inhalt eines Vectors zugreifen will mach ich das ja mit name.at(index). Aber mein Compiler meint, dass die Paramter für at ein Integer ist und auch nur ein Integer rein darf. Gibts da eine Möglichkeit, dass man zum Beispiel auf einen Index zugreifen kann, mit der Größe eines long double?
Freue mich auf Antworten!
-
ich bin mir zu 99.9999999999999999% sicher, dass du kein so großes array brauchst.
-
Nun da hast du dich vertan!
Kann mir nun mal jemand eine ordentliche Antwort geben?
-
Üblicherweise hütet sich der Standard seeeehr davor, allzu konkrete Längenaussagen zu machen.
Wenn ich den Standard recht interpretiere, erlaubt er vector, seinen eigenen size_type zum Indexzugriff zu definieren.
Wenn Deine spezielle STL-Implementation da begrenzt ist (wobei ein signed-Typ wie int sowieso Schwachsinn ist), musst Du Dich nach einer anderen umsehen.Gruß,
Simon2.
-
Wäre es nicht so zu lösen eine eigene lineare Liste zu schreiben und die mit den nötigesten Funktionen auszusatten?
-
Beathoven schrieb:
Wäre es nicht so zu lösen eine eigene lineare Liste zu schreiben und die mit den nötigesten Funktionen auszusatten?
Man kann alles Mögliche machen ... sollte dabei aber einfach und ehrlich die Für's und Wider's abwägen.
ICH würde mich jedenfalls ziemlich gründlich nach einer professionellen Alternative umsehen, bevor ich mir selbst etwas zusammenfummeln würde - das dauert immer viel länger, ist viel komplizierter, fehleranfälliger, unübersichtlicher, imperformanter, .... als man am Anfang gedacht hat.
Aber es gibt natürlich auch Gründe, die für eine eigene Implementation sprechen.Wie würdest Du denn eine "Lineare Liste" implementieren ?
Gruß,
Simon2.
-
und für was brauchst du so ein großes array?
-
Normalerweise sollte es ein size_t sein. Ich bezweifel mal, das man da was größeres braucht. Ganz davon abgesehen, das du nicht so viel Speicher haben dürftest.
-
Beathoven schrieb:
1. Sind die Einträge, die man in einen Vector schreiben kann begrenzt? (Jetzt mal abgesehen von meiner RAM und Festplattenkapazität)
Ja, sind sie - die maximalgröße kannst du per "max_size()" erfragen (aber da wirst du schon einiges an Daten sammeln müssen, bevor du auch nur in die Nähe gelangst - da dürfte eher dein RAM in die Kniee gehen)
2. Wenn ich auf den Inhalt eines Vectors zugreifen will mach ich das ja mit name.at(index). Aber mein Compiler meint, dass die Paramter für at ein Integer ist und auch nur ein Integer rein darf. Gibts da eine Möglichkeit, dass man zum Beispiel auf einen Index zugreifen kann, mit der Größe eines long double?
Wozu brauchst du double an der Stelle? Hast du etwa vor, auch den Index 3.7 zu verwenden? (wenn ja, kannst du auch eine map<> verwenden - obwohl ich nicht sicher bin, ob du da über die Genauigkeitsbeschränkungen der Gleitkomma-Rechnung stolpern könntest)
-
Wenn du nicht grade ausschliesslich ueber double-Literale indizieren willst, sondern deine long double indizes berechnen willst (wozu sonst sollte man so einen Typen zur indizierung waehlen?), wirst du garantiert ueber Rundungsfehler stolpern. Bei maps gibts zwar noch sowas wie upper_bound() und lower_bound(), aber die helfen da auch nicht wirklich weiter, da du nicht per se weisst, ob der Rundungsfehler dir einen groesseren oder kleineren Wert liefert. Wenn du nur eine bestimmte Zahl an Nachkommastellen hast (z.B. maximal drei), kann man einfach mit dem 10^n-fachen (in dem Fall 1000-fachen) rechnen, und zwar als int (ohne Rundungsfehler). Da du ausserdem vermutlich nicht jeden einzelnen Wert dieser "pseudo-floats" belegen wirst, ist weiterhin eine map angebracht (wenn du z.B. nur drei Werte fuer die Keys 0.045, 1.264 und 2.885 hast, waere ein vector mit 2886 Eintraegen fuer die drei Werte etwas overkill)
Naja, man kann viel spekulieren, was du vorhast, am besten erzaehlst du es einfach und es findet sich eine angemessene Loesung -auf jeden Fall Finger weg von float/double als Indextypen (und Schleifenvariablen).