Dynamischer Vektor

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
abgdf

Beitragvon abgdf » Mittwoch 5. November 2008, 17:23

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
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Mittwoch 5. November 2008, 18:58

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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Beitragvon Y0Gi » Mittwoch 5. November 2008, 19:06

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?
bremer
User
Beiträge: 109
Registriert: Sonntag 25. Mai 2008, 00:13

Beitragvon bremer » Mittwoch 5. November 2008, 19:25

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?
BlackJack

Beitragvon BlackJack » Mittwoch 5. November 2008, 19:28

@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.
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Beitragvon HWK » Mittwoch 5. November 2008, 23:15

Ja:[code=]Changed in version 2.6: Added maxlen parameter.[/code]MfG
HWK
abgdf

Beitragvon abgdf » Donnerstag 6. November 2008, 00:16

@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ß
Ingo
User
Beiträge: 59
Registriert: Dienstag 21. Oktober 2008, 09:51

Beitragvon Ingo » Donnerstag 6. November 2008, 07:41

Guten morgen zusammen
ich möchte meine liste mit meinen messwerten füllen und nicht mit irgendwelchen zahlen. das ist mein problem.
Lonestar
User
Beiträge: 147
Registriert: Samstag 9. August 2008, 08:31

Beitragvon Lonestar » Donnerstag 6. November 2008, 07:46

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?
Ingo
User
Beiträge: 59
Registriert: Dienstag 21. Oktober 2008, 09:51

Beitragvon Ingo » Donnerstag 6. November 2008, 10:40

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

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]