Ninnghizidha
Anmeldungsdatum: 16. Mai 2005
Beiträge: 254
Wohnort: Wien / Hannover
|
... weil ich gerade drandenke ... Hallo! Hat jemand eine Ahnung, wie ich in C++ von diesen Arrays die Länge feststelle? template <class K, class V>
MultiHashTable<K,V>::MultiHashTable(K keys[], V values[]):c_hashtablesize(65536){
// aus wie vielen Elementen besteht das Array "keys"?
// aus wie vielen Elementen besteht das Array "values"?
// Fragen über Fragen ...
} ❓ Ninnghizidha.
|
MrMind
Anmeldungsdatum: 25. Mai 2005
Beiträge: Zähle...
Wohnort: Odw.
|
Ich meine ich hätte mal gelesen, das man mit sizeof() dynamisch während der Laufzeit die größe des Arrays bestimmen kann. In meinem Buch habe ich ähnliches wie bei deinem Template gesehen, doch die arbeiten mit statischen angaben (scheiß Beispiele immer 😉 ). Mfg MrMind
|
bitbieger
Anmeldungsdatum: 24. Januar 2005
Beiträge: 85
Wohnort: NRW
|
Das ist in diesem Fall IMO nicht ermittelbar, sofern nicht das letzte Element des jeweiligen Arrays NULL ist. In dem Fall könntest du durchzählen, bis du auf NULL stößt. Da du den Speicher für die Arrays dynamisch allozieren kannst, ist sizeof() nicht in der Lage die korrekte Größe zu ermitteln. Bsp: #include <stdio.h>
int getSize(int arr[]) {
return sizeof(arr)/sizeof(int);
}
int main(void) {
int *array = (int*)malloc(1024 * sizeof(int));
printf("size: %d\n", getSize(array));
return 0;
} ergibt: size: 1
|
uplift
Anmeldungsdatum: 13. Mai 2005
Beiträge: Zähle...
|
Wie wärs mit strlen? Ich hab da was von dynamisch und Laufzeit gelesen, deswegen weiss ich nich ob's nich vielleicht zu einfach wäre, aber versuchen kann ich's ja mal ☺
|
steffmeister
Anmeldungsdatum: 5. April 2005
Beiträge: 403
Wohnort: St. Valentin (Ö)
|
mit strlen gehts sicher auch nicht, weil des gibt ja nur die anzahl zeichen bis (exkl) nullterminator ('\0') zurück (also die Länge eines STRings)... könntest aber trotzdem verwenden, nur: * brauchst am ende einen nullterminator * du musst sicherstellen, dass dazwischen nirgends ein nullterminator ist, sondern eben nur am ende 😉
|
Ninnghizidha
(Themenstarter)
Anmeldungsdatum: 16. Mai 2005
Beiträge: 254
Wohnort: Wien / Hannover
|
Oh, jetzt hätte ich diesen Thread fast vergessen ... Also, erstmal danke für eure Antworten. Wenigstens bin ich mir jetzt relativ sicher, dass es nicht wirklich abprüfbar ist, und ich habe den Weg eingeschlagen, das letzte Arrayelement mit "0" (nicht erlaubter key) zu terminieren ... zwar auch nur eine halbe Lösung, aber es geht wenigstens. ☺ .. aber ich werde es noch mit NULL testen ☺ [edit].. nein, geht auch nicht ... eine Terminiierung voraussetzen ist wohl das einzig brauchbare... [/edit] Danke schön, liebe Grüße, Ninnghizidha
|
bitbieger
Anmeldungsdatum: 24. Januar 2005
Beiträge: 85
Wohnort: NRW
|
Hi, NULL ist gleich 0. ☺ Alternativ kannst du doch auch einfach die Länge der Arrays mit übergeben (KISS = Keep It Simple and Stupid). Ansonsten schau dir mal die STL-Implementierung von map<> an, vielleicht kannst du dir da was abgucken. cu, bitbieger
|
spaceman
Anmeldungsdatum: 1. Mai 2005
Beiträge: 28
|
Vielleicht solltest wenn möglich mit dynamischen Datentypen statt mit arrays arbeiten!
|
m44
Anmeldungsdatum: 16. Mai 2005
Beiträge: 74
|
Was beweist, wie dumm die Sprache C eigentlich ist. ☹
|
Dakuan
Anmeldungsdatum: 2. November 2004
Beiträge: 6339
Wohnort: Hamburg
|
Eine Sprache ist nie dumm... Dakuan
|
Ninnghizidha
(Themenstarter)
Anmeldungsdatum: 16. Mai 2005
Beiträge: 254
Wohnort: Wien / Hannover
|
bitbieger: NULL kann nicht 0 sein ... wenn das so wäre, wäre das pervers. .. und übergeben kann ich die länge des Arrays nicht, da diese Funktion Teil einer Schnittstelle ist ... ich darf sie nur programmieren, nicht aber ändern. STL? map<>? Werd ich mal ☺ spaceman: Tut nichts zur Sache. Ninnghizidha.
|
m44
Anmeldungsdatum: 16. Mai 2005
Beiträge: 74
|
Dakuan hat geschrieben: Eine Sprache ist nie dumm... Dakuan
Jajaja... Stimmt ja irgendwie. Aber Programmierung mit C ist so kontra-intuitiv. Aber C will ja auch gar nicht intuitiv sein, sondern ist mehr ein Bild der "Denkweise" eines Rechners. Was andersherum ja vieles sehr vereinfacht - um nicht zu sagen erst ermöglicht. Trotzdem, außerhalb von betriebssystemnahen Anwendungen würde ich nicht freiwillig C programmieren.
|
blackbird
Anmeldungsdatum: 19. November 2004
Beiträge: 3396
Wohnort: Hermagor, Kärnten - Österreich
|
m4$$4 hat geschrieben: Dakuan hat geschrieben: Eine Sprache ist nie dumm... Dakuan
Jajaja... Stimmt ja irgendwie. Aber Programmierung mit C ist so kontra-intuitiv. Aber C will ja auch gar nicht intuitiv sein, sondern ist mehr ein Bild der "Denkweise" eines Rechners. Was andersherum ja vieles sehr vereinfacht - um nicht zu sagen erst ermöglicht. Trotzdem, außerhalb von betriebssystemnahen Anwendungen würde ich nicht freiwillig C programmieren.
Der Code sieht aber nach C++ aus. Und ich finde die Sprache intuitiv 🙄
|
bitbieger
Anmeldungsdatum: 24. Januar 2005
Beiträge: 85
Wohnort: NRW
|
Ninnghizidha hat geschrieben: bitbieger: NULL kann nicht 0 sein ... wenn das so wäre, wäre das pervers.
/usr/include/linux/stddef.h:
#undef NULL
#if defined(__cplusplus)
#define NULL 0
#else
#define NULL ((void *)0)
#endif 😀
|
Ninnghizidha
(Themenstarter)
Anmeldungsdatum: 16. Mai 2005
Beiträge: 254
Wohnort: Wien / Hannover
|
Ist ja erstaunlich .... 😲
|