Array exceeded erkennen
-
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.
-
noproblem schrieb:
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.
öhm? hö? wie kann man etwas schneller in ein array einfügen oder löschen als in einem vector? für ein array muss man das alles aufwendig selber coden. und auch dann ist der vector nur dann wesentlich langsamer wenn die grösse angepasst werden muss. und das kann man bei einem statischen array bekanntlich garnicht.
-
was willst du mir damit sagen?
-
Shade Of Mine schrieb:
noproblem schrieb:
Mal abgesehen von den Speicherlöchern die beim resize entstehen...
wtf?
so wie ich das verstehe meint er damit, dass bei einem verkleindernden resize bei einem vector der speicher nicht unbedingt wieder freigegeben wird sondern der vector diesen aus performance gründen behält... glaub ich
-
@Shade of Mine
Ach nur das es den Anschein hatte, das du eine andere Meinung hattest.
Natürlich ist es aufwendiger, aber dafür auch schneller.Und von statischem Array war keine rede.