Znovupoužitelnost datových struktur v C

BrainLess

Re:Znovupoužitelnost datových struktur v C
« Odpověď #30 kdy: 04. 02. 2015, 10:58:39 »
Proc dve impementace ?

void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))
Ach jo... druhej :)

No, protože tahle funkce může existovat jenom proto, že pracuje nad polem. Jak bys chtěl udělat stejně obecnou funkci a nevědět, jak uložená data jí předáš? Co když jí předám třeba strom?

Obecně to může fungovat tak maximálně pro bubble sort, který od struktury neočekává nic jinýho než operaci swap.

No pokud bude operace swap netrivialni muzu ji vytahnout stejnym zpusobem vne "sortu" jako "compare"  a fungovat to bude pro cokoliv otazkou je jestli to jeste bude optimalni ..  (vzdy je to kompormis mezi rychlosti a lenosti) 


Re:Znovupoužitelnost datových struktur v C
« Odpověď #31 kdy: 04. 02. 2015, 11:05:03 »
No pokud bude operace swap netrivialni muzu ji vytahnout stejnym zpusobem vne "sortu" jako "compare"  a fungovat to bude pro cokoliv otazkou je jestli to jeste bude optimalni ..  (vzdy je to kompormis mezi rychlosti a lenosti)
Ano, pokud ti k celýmu sortu stačí jenom swap, tak se to ještě dá. Pokud ale budeš potřebovat vkládat kamkoli, tak už to přestává být zajímavý - a dostáváš se přesně do toho bodu, kdy snaha o sjednocení udělá víc škody než užitku. Pak už je prostě jednodušší napsat sort_struktura1, sort_strutkura2, ... a nějakým způsobem je (když už) sjednotit, aby se při volání sort(...) zavolala ta správná funkce pro danou strukturu. Bonus pak je, že můžeš jednotlivý funkce parádně optimalizaovat na míru.

On je to obecný "filosofický" problém - takový ten klasický "OOP polymorfismus" vždycky nějakým způsobem využívá princip "nejmenšího společného jmenovatele", čili když se to implementuje neuváženě, vede to jenom ke zpkriplení struktur, který by jinak byly super :)