Neue Antwort schreiben 
 
Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Handhabung von Arrays in C++
s4ndwichMakeR Offline
Realitätsfeinmotoriker‮

Beiträge: 5.195
Registriert seit: Jul 2008
Beitrag #1
Handhabung von Arrays in C++
Hallo Leute,

trotz Resignation vor dem extremen Lowlevel-Flair von C++, stoße ich immer wieder auf neue Hürden, die ich aus den sophistizierteren Sprachen nicht kenne. Aktuell sind angesagt: Arrays mit variablen Dimensionen und das Fehlen einer foreach-Funktion.

Kann mich mal jemand aufklären?

Vielleicht ein profanes Beispiel zum Anstoß:
Herausforderung: Berechnung des arithmetischen Mittels aus Werten, die vorab eingelesen und in einem eindimensionalen Array gespeichert werden.
Hürden: Anzahl der eingebbaren Werte unbegrenzt (bis auf technische Grenzen des Speichers beispielsweise) und Ermittlung der Anzahl, durch die geteilt wird.

• • • – • – – • – –
06.01.2013 17:15
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
gandro Offline
Quälgeist

Beiträge: 8.950
Registriert seit: Jul 2008
Beitrag #2
RE: Handhabung von Arrays in C++
Disclaimer: Ich kann kein C++, ich kann nur C. Möge jemand mit Ahnung das hier korrigieren.

Arrays dynamischer Länge (also feste Länge, die aber erst zur Laufzeit bekannt ist) sind son Ding. Weil Grösse des Stacks zur Compile-Time berechnet wird, sowas wie

Code:
void foo(int n) {
int[] bar[n];
}

Ist schwierig zu kompilieren. Meines Wissens kein Standard-C++, auch wenns manche Compiler können. Speicherst du das Array auf dem Heap, dann ist das kein Ding, weil da der Platz erst zur Laufzeit reserviert wird.

Code:
void foo(int n) {
    int[] bar = new int[n];
    // ...
    delete [] bar;
}

Musst du dann aber halt auch auch von Hand wieder Löschen.

Wenn ich deinen Beitrag aber richtig verstehe weisst du die Anzahl Elemente gar nicht im voraus? Dann empfiehlt sich eh die Verwendung von std::vector, scheint mir eh die Datenstruktur der Wahl zu sein, die das C++-Universum zusammenhält.

foreach gibts in der Tat nicht, iteriere einfach über den Index gibt aber irgendwelche C++-Iteratoren die ich nicht kenne, die aber nicht komplizierter scheinen als Iteration über den Index (kann wie gesagt kein C++), das ist offenbar auch beim vector die Methode der Wahl: http://www.yolinux.com/TUTORIALS/LinuxTu...tml#VECTOR
(Dieser Beitrag wurde zuletzt bearbeitet: 06.01.2013 17:47 von gandro.)
06.01.2013 17:44
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
niwax Offline
Hardcore-Coder

Beiträge: 3.822
Registriert seit: Dec 2009
Beitrag #3
RE: Handhabung von Arrays in C++
Ohne new wäre was im sinn von
Code:
struct flexarray
{
  int values[10];
  int count;
  *flexarray next;
}
denkbar, was einfach so viele arrays einer größe zusammenhängt, wie nötig sind. ist aber etwas unschön


(Dieser Beitrag wurde zuletzt bearbeitet: 06.01.2013 17:49 von niwax.)
06.01.2013 17:48
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
s4ndwichMakeR Offline
Realitätsfeinmotoriker‮

Beiträge: 5.195
Registriert seit: Jul 2008
Beitrag #4
RE: Handhabung von Arrays in C++
Kann man allgemein sagen, dass Arrays dynamischer Größe (also solche, die zur Laufzeit unbestimmt wachsen können), ein Luxus sind, der für C++ nicht vorgesehen ist?

Einer der wichtigsten Vorteile von Arrays im Gegensatz zum Einsatz statischer Variablen, geht dadurch verloren, nämlich eine unbestimmte Anzahl von zu verarbeitenden Werten.

… oder hat sich gar eine möglichst große »Für-alle-Fälle«-Dimensionierung à la int foo[65536]; eingebürgert?

• • • – • – – • – –
06.01.2013 18:02
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
gandro Offline
Quälgeist

Beiträge: 8.950
Registriert seit: Jul 2008
Beitrag #5
RE: Handhabung von Arrays in C++
Wie gesagt, der std::vector (der im Grunde genau macht was niwax vorgeschlagen hat, nur halt bereits vorimplementiert und getestet) ist exakt für deinen Fall da und nichts anderes. Die C++-Arrays sind halt etwas Low-Leveliger als das was dir Java anbietet, und was PHP oder Python unter Array verstehen ist bei C++ schlicht der Vektor.

Kein C++-Programmierer mit Verstand mit sowas wie int foo[65536], sondern verwendet einen Vektor dafür. Er bietet dir praktisch gleiche Geschwindigkeit wie ein Array, aber ohne das selber verwalten zu müssen. Und ich glaube auch mit Bounds-Checking. Benutz den Vektor. Ernsthaft.
(Dieser Beitrag wurde zuletzt bearbeitet: 06.01.2013 18:07 von gandro.)
06.01.2013 18:07
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
DosAmp Offline
Anderes Zeigegerät

Beiträge: 12.217
Registriert seit: Jul 2008
Beitrag #6
RE: Handhabung von Arrays in C++
(06.01.2013 17:48)niwax schrieb:  Ohne new wäre was im sinn von […] denkbar, was einfach so viele arrays einer größe zusammenhängt, wie nötig sind. ist aber etwas unschön

Abgesehen davon, dass die C++-Standardbibliothek wie gesagt ein ordentliches System von Collections hat und du da C-mäßig statt einer verketteten Liste eine verkettete Liste von Listen(knoten) implementierst (?!), wie anders als mit einem C-mäßigen calloc wölltest du dann deine Liste erweitern?

Erinnerst du dich an #whfclassics? Es ist zurück! In Pog-Form.
06.01.2013 18:12
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Chrisse Offline
Generischer Benutzertitel

Beiträge: 2.936
Registriert seit: Jul 2008
Beitrag #7
RE: Handhabung von Arrays in C++
(06.01.2013 18:02)s4ndwichMakeR schrieb:  Kann man allgemein sagen, dass Arrays dynamischer Größe (also solche, die zur Laufzeit unbestimmt wachsen können), ein Luxus sind, der für C++ nicht vorgesehen ist?

Einer der wichtigsten Vorteile von Arrays im Gegensatz zum Einsatz statischer Variablen, geht dadurch verloren, nämlich eine unbestimmte Anzahl von zu verarbeitenden Werten.

Das ist ein Luxus, der in keiner Sprache vorgesehen ist, was du von anderen Sprachen vielleicht als "dynamisches Array" kennst wird wohl ne gekapselte verkette Liste (siehe niwax) oder sonst ne lustige Datenstruktur sein. Für ein wirkliches dynamisches Array müsstest du das Array aufgrund von Speicherfragmentierung ständig verschieben wenns größer wird - und das ist enorm ineffizient. Glaub kaum dass das irgend ein Compiler machen wird.

„Zitate von sich selbst in der Signatur sind doof.“ Chrisse, 2009
„Hmm... mal was aus 2010 reinnehmen“ Chrisse, 2010
„Ach, wie die Zeit vergeht...“ Chrisse, 2011
„Bin immernoch dagegen“ Chrisse, 2012
„Jetzt auch mit 2013“ Chrisse, 2013
„2021 ich komme“ Chrisse, 2014
„Ab jetzt wieder länger“ Chrisse, 2015
„Gut Ding will Weile haben“ Chrisse, 2016
„Meine Signatur: Öfter geupdated als mein Windows“ Chrisse, 2017
„Klicken sie weiter, hier gibt es nichts zu lesen“ Chrisse, 2018
„Dieser Post kann Spuren von Sarkasmus enthalten“ Chrisse, 2019
„Reinstate Chiaki“ Chrisse, 2020
„2021 ist eine Coverstory der Moderation und nie passiert!“, Chrisse, 2022
06.01.2013 18:16
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
friedrichheinze Offline
...und Kondensatoren.

Beiträge: 2.838
Registriert seit: Jul 2008
Beitrag #8
RE: Handhabung von Arrays in C++
tl;dr benutz std::vector - und foreach gibt's seit C++11, Syntax ist wie in Java.
06.01.2013 19:27
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Neue Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste