004
07.07.2003, 02:10 Uhr
Pablo
Supertux (Operator)
|
Hat mich schon gewundert ohne Arrays, ohne Klassen kann ich verstehen. Wenn es C++ ist, dann kannst du class mit strcut vertauschen vertauschen. Ich weiß aber nicht, ob, wenn du typedef struct benutzt, Funktionen erlaubt sind, weil wenn du x.empty() haben willst, ist das eine Klasse bzw. struct oder union.
Eine andere Lösung ist wie gesagt Verkettete Listen. Verkettete Listen sind Klassen, die eine weitere Variable enthalten, deren Typ dam Typ der Klasse entspricht. Meistens ist diese ein Pointer, d.h. ein Zeiger auf das nächste Element. Somit kann man unendlich lange Listen erzeugen.
Wenn du aber eine Liste willst, die eine feste Länge hat und deren Länge dir bewusst ist, dann benutze ein Array.
Der folgende Code tut das, was ich schon gepostet habe, aber ohne Klasse, sondern mit typdef struct.
C++: |
#include <stdio.h>
typedef struct Liste { int list[12]; void empty(); void init(); void print(); };
void Liste::empty() { for(int i=0; i<12; i++) list[i] = 0; }
void Liste::init() { this->empty(); // ohne this-> geht nicht // müsstest 2 Mal empty schreiben, weil es // hier das 2 Mal wäre }
void Liste::print() { printf("{"); for(int i=0; i<12; i++) printf("%d%s", this->list[i], i==11 ? "}\n" : ", "); }
int main() { Liste x; x.init(); for(int i=0; i<12; i++) x.list[11-i] = i+1; x.print(); x.empty(); x.print(); }
|
Ich ich schon sagte, die Ausgabe ist: {12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1} {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
Ach so, vielleicht ist dir ein Rätsel was i==11 ? "}\n" : ", " tut. Die meisten C/C++ Operatoren sind zweistellig, ? : ist 3 Stellig. Zuerst brauchen wir eine Bedingung, d.h. einen boolschen Ausdruck. In diesem Fall i == 11. Sollten wir schon am Schluss sein, dann muss keine Komma geschrieben werden sondern }. Wenn i==11 true (besser gesagt einen Wert ungleich 0) liefert, so wird zurüchgegeben, das was vor : steht, sonst das was nach : steht. In diesem Fall strings, deshalb %s im Format von printf. -- A! Elbereth Gilthoniel! silivren penna míriel o menel aglar elenath, Gilthoniel, A! Elbereth! Dieser Post wurde am 07.07.2003 um 02:14 Uhr von Pablo Yanez Trujillo editiert. |