Wie kann ich mir dann einen gezielten Zugriff auf ein beliebiges Element im Array vorstellen?Krishty hat geschrieben:Sie arbeiten ziemlich genau wie .begin() und .end() in STL-Containern; mit Zeigern als Iteratoren.BeRsErKeR hat geschrieben:Klingt interessant. Kannst du mir da mal ein Beispiel zeigen? Zwecks range-Strukturen.Krishty hat geschrieben:Array-Syntax ist ein interessantes Thema … ich hasse C(++)-Arrays. Im Augenblick löse ich in meinen C++-Projekten alles über range-Strukturen, die auf Anfang und Ende von Feldern zeigen, und das fließt wie Butter – abgesehen von dem winzigen Detail, dass der Compiler es nicht ausreichend optimiert, weil es keine Wurzel in der Sprache selber hat; und dass mir bei String-Literalen immer die automatisch angehängte Null zum Verhängnis wird (for teh luv of gawd, WHY!). Ich muss mir auch unbedingt nochmal Gos Slices ansehen, falls ich irgendwann mal Zeit habe. Und dann wären da noch Strings, die ja auch ein Thema für sich sind (Rein in die Sprache oder nicht? Nur Literale? Nullterminiert oder nicht? …).BeRsErKeR hat geschrieben:hab mich da teilweise an D orientiert, genau wie bei der Syntax von ArraysEigentlich kannst du jedes Array im Programm durch einen STL-Container ersetzen und hast ziemlich genau diese Syntax, nur eine Million mal langsamer als wenn es direkt in der Sprache verankert wäre.(Nachtrag: Nein, idiotisch. Eine Range referenziert vorhandenen Speicher, während ein STL-Container ihn kopiert.)
Dann gibt es noch so Kunststückchen wie, dass man eine Range an beliebiger Stelle in zwei Teile zerlegen kann. Ein Parser würde z.B. die Range des verbliebenen Textes so lange hinter dem ersten Buchstaben teilen, bis nichts mehr übrig (der Text also geparst) ist. Bisher habe ich das aber nicht explizit gebraucht; schlicht den Anfang zu inkrementieren hat gereicht.
Der Clou ist nun, dass man out-of-bounds-Fehler einfach analyisieren kann, weil jeder Zeiger nur entweder an einer einzelnen Instanz oder aber an einer Range bestimmter Größe hängt.
Kein Beispieltext, weil mein Entwicklungssystem atm nicht am Netz hängt.
So in etwa?
Code: Alles auswählen
foo : int_array;
// fill array with values
bar : int(foo.begin() + 5); // Zugriff auf das 6. Element?
// normal: int bar = foo[5];