Array exceeded erkennen
-
Hallo,
gar nicht. In C++ solltest du stattdesen vector benutzen, der wird automatisch erweitert, wenn was hinzugefügt wird.
-
*hüstel* wenn ich weis,dass mein array 10 datenblöcke haben wird, dann brauch ich keinen vecor(und egal was ihr sagt, es wurde letztens bewiesen dass er langsamer ist).
Das worum es martin geht, ist wahrscheinlich, dass er munter in ein array schreibt bzw aus einem array liest, und sich dann wundert, dass etwas fehlt, und er nicht genau weis wo er den fehler suchen soll.natürlich, wenn ich nicht weis, wie groß mein array sein wird, dann sind vector arrays viel schöner
.
-
Hallo,
ich denke, dass wenn nicht wirkliche Gründe gegen einen Vector sprechen, man diesen benutzen sollte. Aus Übungszwecken kann ich das auch noch nachvollziehen, aber die vorhandenen Geschwindigkeitsvorteile (wie extrem die auch immer sein mögen, aber Welten werden das nicht sein) sollten doch bei den meisten Programmen nicht vor die Sicherheit gestellt werden?!
und sich dann wundert, dass etwas fehlt, und er nicht genau weis wo er den fehler suchen soll.
Es würde ja wahrscheinlich nix fehlen, dann wäre dies ein typischer Buffer Overflow.
-
ich hab die daten jetzt mit der geschwindigkeit nicht so ganz im kopf, aber sumieren tut sich sowas ganz schnell..
das was mich am Vector neben der geschwindigkeit ja auch stört ist, dass von vornherein immer eine bestimmte menge platz reserviert wird, das kostet beim erstellen zeit, und wenn du den platz an deine Wünsche anpassen willst, dann kostets schonwieder zeit.aber mal back to topic:
ich weis ja jetzt nicht, was der threadersteller machen will, aber wenn ich zb ein programm schreibe, in dem immer die nächsten 10 integer datenblöcke aus einer datei eingelesen werden, und verarbeitet werden, ich aber wegen eines schuselfehlers immer 11 einlese, dann fehlt da natürlich was.
Das denkbar schlechteste wär dann, das Problem mithilfe eines Vectors zu erschlagen,dann ist der Fehler am Ende immernoch im programm,es mag vielleicht auch erstmal funktionieren, aber irgendwann wunderst du dich, dass ein Programm, welches eben diese "konstruktion" wiederverwendet undefiniertes verhalten erzeugt.
-
Absolute Sicherheit hast du in C++ selten.
Ich persönlich bevorzuge aus geschwindigkeitsgründen auch eher eigene Array-Konstrukte als wie die Vector-Klasse.
Vektoren verwende ich sowieso selten (Speicherlöcher und Performance).
Die Out of Range Problematik fange ich daher lieber selbst ab.
-
ich denke, dass wenn nicht wirkliche Gründe gegen einen Vector sprechen, man diesen benutzen sollte. Aus Übungszwecken kann ich das auch noch nachvollziehen, aber die vorhandenen Geschwindigkeitsvorteile (wie extrem die auch immer sein mögen, aber Welten werden das nicht sein) sollten doch bei den meisten Programmen nicht vor die Sicherheit gestellt werden?!
Ich will jetzt hier keinen Glaubenskrieg starten aber hier muss ich otze rechtgeben. Manchmal ist die Grösse eines Arrays von vorn herein klar und deshalb ist das wirklich unötiger Overheat und Tiparbeit.
-
Hallo,
Absolute Sicherheit hast du in C++ selten.
Die gibts wohl nirgendwo. Wenn du zu 100% weisst, was du tust und somit keine Fehler machst, und der Geschwindigkeitsvorteil sich enorm auswirkt, dann ist es wahrscheinlich wirklich besser, auf Vector zu verzichten. Aber da das ja so viele Leute wissen, gibts ja auch so viele absolut fehlerfreie Programme.
-
Ich will einen Beweis das vector langsamer bei lesender und schreibender funktion ist! Und ich will wissen, warum C++ keine Sicherheit bietet!
Denn Eure Aussagen sind strikt falsch!
-
Artchi schrieb:
Ich will einen Beweis das vector langsamer bei lesender und schreibender funktion ist!
nö, ist nur beim anlegen und löschen lahm.
-
Vector benutzt bei benutzung des standardallocator new, und damit ist Vector auf jeden Fall langsamer.
Ich werd aber extra für dich noch einen test durchführen
-
Schaust du hier:http://www.infrasoft.co.at/hn/stl.htm
Es geht dabei vor allem um das einfügen und löschen, was extrem viel Zeit verbraten tut.Beim lesen und schreiben habe ich bisher noch keinen Unterschied gemessen, müsste man mal testen.
-
Vector benutzt bei benutzung des standardallocator new, und damit ist Vector auf jeden Fall langsamer.
Ich werd aber extra für dich noch einen test durchführenAuch dafür gibt's 'n dickes LOL. Weder beim lesen noch beim schreiben gibt's ein new.
Marke:
int foo[20]; int * bar = new int[20]; foo[13] = 6; bar[13] = 6; // beide genau gleich schnell. delete bar;
-
otze schrieb:
Vector benutzt bei benutzung des standardallocator new, und damit ist Vector auf jeden Fall langsamer.
Ich werd aber extra für dich noch einen test durchführenWas hast du eigentlich immer mit deinem new???
Den haar genau gleichen Spruch hast du auch schon im Topic über std::string abgelassen.
-
volkard schrieb:
Artchi schrieb:
Ich will einen Beweis das vector langsamer bei lesender und schreibender funktion ist!
nö, ist nur beim anlegen und löschen lahm.
Danke, nichts anderes wollte ich hören.
Wobei das Anlegen nur innerhalb des Bereiches lahm ist. Am Ende des Vectors nicht, außer der reservierte Bereich wird überschritten. Weiß nicht warum einige Leute std::vectr meiden, wenn selbst Bjarne Stroustroup sagt, das dieser keinen Nachteil gegenüber einem Array hat. Ich pers. meide Arrays wie die Pest.
-
noproblem schrieb:
Es geht dabei vor allem um das einfügen und löschen, was extrem viel Zeit verbraten tut.
Du vergleichst Äpfel mit Birnen.
Wenn häufig etwas eingefügt oder entfernt werden muss, ist ein Array/Vector die falsche Datenstruktur. Das liegt aber nicht an std::vector.
-
Gerade mal getestet 1000 * 50000 Elemente schreiben (Typ Integer)
vector: 0,671 s
int array:0,55 sIst ja wohl auch logisch das der Zugriff auf einen natürlichen Datentypen schneller vonstatten geht.
-
@Artchi
jep, beide benutzen den standard allocator,welcher new benutzt, und da bewiesen ist,dass allokieren aufm free store langsamer ist als wenn man über den stack geht, ist und bleibt new langsamer, wer das nicht versteht soll es selber austesten.achja doppelposts sind was feines^^
-
@cd9000
Das sollte auch kein vergleich sein, sondern nur feststellen wo es am vector hapert. Mal abgesehen von den Speicherlöchern die beim resize entstehen...
-
noproblem schrieb:
Mal abgesehen von den Speicherlöchern die beim resize entstehen...
wtf?
-
@Shade of Mine
Schau mal da:http://www.c-plusplus.net/forum/viewtopic.php?t=39460
Dann siehst du was ich meine.