Seite 2 von 2

Verfasst: Mittwoch 5. November 2008, 17:23
von abgdf
Hallo,

erstmal noch etwas zum Hintergrund bzgl. "dynamischer Vektoren":

In C und C++ muß man den Speicher selbst verwalten.
Statische, also unveränderbare Arrays (Felder, Vektoren) (vergleichbar Python-Tuplen (die erstmal nur ganze Zahlen enthalten, bei Strings wird's schon wieder schwieriger)), sind dabei nicht so problematisch, weil ihr Speicherbedarf bei Deklaration, bzw. Initialisierung bekannt ist.
Wenn man an eine dynamische Liste etwas anhängt, verändert sich aber ihr Speicherbedarf. Das muß der C/C++-Programmierer berücksichtigen, oder es entstehen Speicherlecks usw..
Es gibt mehrere Möglichkeiten, dynamische Listen in C/C++ zu programmieren. Je nachdem können z.B. Suchoperationen in verschiedenen Listentypen schneller oder langsamer sein usw..
In der "Standard Template Library" (STL) von C++ gibt es z.B. die Listentypen "vector", "deque" und "list":

http://www.c-plusplus.de/forum/viewtopi ... 43816.html

Soweit ich weiß, gibt es in C so ein praktische Standardbibliothek für Listen nicht. Offenbar wird erwartet, daß der Programmierer sie selbst implementiert. Immerhin gibt es hier

http://freshmeat.net/projects/libhx/

eine C-Bibliothek, die sich daran versucht.

In Python wird die Implementation der Listen vom Programmierer absichtlich ferngehalten. Diese Ebene ist bereits im Python-Interpreter fertiggestellt.
Das ist einer der wesentlichen Gründe, warum die Programmierung mit Python im Verhältnis so schnell und angenehm ist.
Dies ist jedoch auch einer der Gründe, warum Python-Code in der Regel insgesamt etwas langsamer abläuft als C-Code.

Viele Grüße

Verfasst: Mittwoch 5. November 2008, 18:58
von Leonidas
abgdf hat geschrieben:Soweit ich weiß, gibt es in C so ein praktische Standardbibliothek für Listen nicht. Offenbar wird erwartet, daß der Programmierer sie selbst implementiert. Immerhin gibt es hier

http://freshmeat.net/projects/libhx/

eine C-Bibliothek, die sich daran versucht.
Nunja, ganz so schlimm ist es nicht, denn mit der GLib gibt es durchaus eine Library für C die einem lästige Dinge abnimmt. Wenn man bedenkt, dass Programme wie irssi dasnutzen und GLib die Grundlage von GTK+ ist (und auch eigentlich von dort stammt), welches von vielen, vielen Programmen genutzt wird dann kann man durchaus von "populär" sprechen. Wer mehr Syntaktischen Zucker braucht, kann sich an dieser Stelle auch Vala ansehen, eine Sprache die zu C+GLib (GObject) kompiliert wird.

Verfasst: Mittwoch 5. November 2008, 19:06
von Y0Gi
BlackJack hat geschrieben:Für den Fall wäre wohl eine `collections.deque` eine bessere Wahl. Natürlich am besten in eine eigene Klasse verpackt.
ichbinsisyphos hat geschrieben:Lässt sich da die Länge fixieren?
BlackJack hat geschrieben:Nein, deswegen ja die eigene Klasse.
Mir spuckt die Doku diese Signatur aus: ``collections.deque([iterable[, maxlen]])`` - reicht das nicht?

Verfasst: Mittwoch 5. November 2008, 19:25
von bremer
Ingo hat geschrieben:Also ich habe eine schleife in der zuerst nach einem messwert gefragt wird. ich bekomme den messwert. dieser messwert wird in der tabelle angezeigt. die schleife ist nun zu ende. sie beginnt von vorne und fragt wieder nach dem messwert ich bekommen den messwert dieser soll in einer neuen zeile angezeigt werden. der vorherige messwert ist eine zeile oben drüber. ich bestimme wie oft die schleife durchläuft und bestimme dadurch die anzahl meiner messwerte. aber wie kann ich immer den aktuellsten messwert in die neue zeile bringen?
Sag uns doch mal, was du mit Tabelle, anzeigen und neuer Zeile meinst.

Redest du da von Datenstrukturen wie einer Liste oder von der print-ausgabe, etc.? Willst du die Daten konservieren oder nur anzeigen?

Verfasst: Mittwoch 5. November 2008, 19:28
von BlackJack
@Y0Gi:

Code: Alles auswählen

In [284]: collections.deque([], 10)
---------------------------------------------------------------------------
<type 'exceptions.TypeError'>             Traceback (most recent call last)

/home/bj/<ipython console> in <module>()

<type 'exceptions.TypeError'>: deque expected at most 1 arguments, got 2
Muss dann wohl in 2.6 neu sein.

Verfasst: Mittwoch 5. November 2008, 23:15
von HWK
Ja:

Code: Alles auswählen

Changed in version 2.6: Added maxlen parameter.
MfG
HWK

Verfasst: Donnerstag 6. November 2008, 00:16
von abgdf
@Leonidas: Aha, mit Glib geht das :idea:. Soweit bin ich eben nicht in C vorgedrungen. Ist mir halt zu anstrengend, wenn man einfach

Code: Alles auswählen

a = [1, 2, 3]
haben kann.

@Ingo:
Also ich habe eine schleife in der zuerst nach einem messwert gefragt wird. ich bekomme den messwert.
Woher ?
dieser messwert wird in der tabelle angezeigt.
In welcher Tabelle ? Excel ?
die schleife ist nun zu ende. sie beginnt von vorne und fragt wieder nach dem messwert
Wen ?
ich bekommen den messwert
Woher ?
dieser soll in einer neuen zeile angezeigt werden. der vorherige messwert ist eine zeile oben drüber.
Was für eine Zeile ? Eine Terminal-Zeile ? Eine Excel-Tabellenzeile ?
ich bestimme wie oft die schleife durchläuft und bestimme dadurch die anzahl meiner messwerte.
Wie ?
aber wie kann ich immer den aktuellsten messwert in die neue zeile bringen?
Das hängt davon ab, was es für eine Zeile ist: Bei einer Ausgabe im Terminal geht das anders als bei einem Eintrag in eine Excel-Tabelle.

Gruß

Verfasst: Donnerstag 6. November 2008, 07:41
von Ingo
Guten morgen zusammen
ich möchte meine liste mit meinen messwerten füllen und nicht mit irgendwelchen zahlen. das ist mein problem.

Verfasst: Donnerstag 6. November 2008, 07:46
von Lonestar
na, wie dir schon mehrere geschrieben haben - poste deinen momentanen code, da wird dir schon wer helfen. Aber einfach raten ist verdammt schwierig. Liest du den überhaupt nicht was dir hier alles geantwortet wird?

Verfasst: Donnerstag 6. November 2008, 10:40
von Ingo
Doch natürlich lese ich die antworten.
ich habe mein fehler gefunden. danke für euere mühe. tut mir leid das dass so lange gedauert hat. bin manchmal schwer von begriff