我已經寫了大量的抽象數據類型(即:散列表,堆等)和簡單的算法(即:搜索,排序,列表操作等)的集合所有工作在int
的陣列上。我修改我的一些算法,像我有什麼下面這樣我就可以概括,而無需重新編寫每個相同的算法,我要排序的每個數據類型的代碼/比較:泛型和按大小而不是按類型鑄造
void* bubbleSort(void* inputArray, void (*functionPtr)(void*,void*)), size_t dataTypeSize, size_t numElements)
的想法我希望能夠對任意數據類型的數組進行排序(即:自定義struct
s),爲了適應這種情況,我將輸入數組作爲void指針,排序算法需要函數指針到特定的比較函數,因此它知道如何比較相同數據/結構類型的任何兩個元素。到現在爲止還挺好。
我弄不明白的一件事是如何在函數內正確地投射數組,以便我可以一次訪問單個元素。我試圖完成這樣的:
someRandomDataType* tempArray = (someRandomDataType*)inputArray;
但是,我找不到在運行時這樣做不使用宏的任何手段(我想避免在這種情況下,如果可能的話) 。在我看來,我真正需要做的就是鑄造inputArray
,以便將它看作是具有任意大小的元素的一些數組。是否有某種方式來將指針到數組,這樣,動態的,它等同於:
(typeThatIsDataTypeSize*) tempArray = (typeThatIsDataTypeSize*)inputArray;
其中「dataTypeSize」指的是傳遞給排序函數size_t
輸入值?謝謝!
您實際上並不需要轉換爲基礎類型。只需在char指針中工作,並根據需要手動縮放指針。你可以找到qsort的源代碼來看看它是如何完成的。 –
'void(* functionPtr)(void *,void *))':您必須返回結果比較函數。 – BLUEPIXY