通常情況下,在C編程的時候,我發現自己希望,我不得不像載體或列表類的訪問從C++開始,我最終實現了某種高級數據結構的精簡版本,但需要相當長的時間。我想知道是否有人知道C中的高質量簡單數據結構的好庫?
回答
謝謝,但我正在尋找一些比這更輕量級的東西。 – Slubb
glib不是「重」,只是避免使用GObjects並假裝使用OO。 – ShinTakezou
我喜歡GLib這種東西;你最終編寫的代碼是乾淨的,這些庫易於使用,穩定,成熟和跨平臺,並且文檔非常好。
您可能還需要看一看Rusty Russell的CCAN項目。我沒有使用任何代碼,但我肯定會去沾我的腳趾在接下來的時間我有類似的需求:
理念
那的C代碼不錯段應被移出垃圾代碼目錄並暴露於更廣泛的世界,在那裏他們可以成爲有用的東西。
CCAN是成功的CPAN項目的Perl代碼開發和 共享後鬆散建模。
除了耍貧嘴的其他人所說,你可以沒有任何類型的安全創建自己的泛型類型,如使用void *
作爲通用指針指向下一個堆棧對象的鏈接列表。一些甚至用宏在ANSI C中創建類似模板的行爲並取得了一些合理的成功。在cplusplus.com的論壇中搜索一個或兩個示例(如果我記得正確的話,那裏的數量不會多於此)。
或者如紙Object-Oriented Programming With ANSI C描述你能實現自己的OOP方案,但它的東西,我不會建議。你不妨花費一些時間來創建這個野獸(並且可能不知道它是如何工作的),並學習一些GLib來熟悉它。
個人而言,我更喜歡第一種方法。你失去了類型安全性並獲得了一堆強制類型,但這是最快實施的。該方法的真正問題是存儲的數據。轉換爲C的std::stack<int>
只是一個結構堆棧,它具有類型爲int的數據字段。 std::vector<std::stack<int> >
,整數堆棧的可尋址列表呢? C標準不能保證從一個指針類型轉換爲一個整型的類型可以在沒有信息丟失的情況下工作。換句話說,雖然你可以使用指針,但你不能使用普通整數來存儲信息。也許有一些展開的模板專門化工作 - 一個用於int(一個用於long long?),一個用於double,另一個用於指針類型。
最後,最好的解決辦法是使用像GLib的圖書館,但如果你喜歡推出自己的,創建時要小心。你永遠不知道什麼時候需要容器中物品類型的組合。
「C標準無法保證從指針類型轉換爲整數類型可以在沒有信息丟失的情況下運行。」 (C99)標準爲此包含stdint.h中的intptr_t。 –
是的,它的確如此,但不能保證任何其他整數類型的信息都完整。當sizeof(void *)== 16'爲真(128位指針)時,不能可靠地說'int64_t'(對於那些MSVC人來說''__int64')將能夠保存'void *'的值。雖然這樣的系統可能只存在於理論中,但這種代碼不能被依賴。沒有什麼是面向未來的,但至少可以嘗試避免代碼破壞。 –
對於無符號類型,如果'TYPE_MAX> = INTPTR_MAX'或'TYPE_MAX> = UINTPTR_MAX',或者更一般地(在運行時),如果sizeof(type)> = sizeof(其他整型)可以容易地保存這些信息void *)'。但是,如果您正在討論將數值數據存儲在'void *'中,您可以始終反轉測試,或者始終使用'(u)intptr_t'並讓隱式整數轉換處理任何潛在問題。 –
- 1. Javascript:高級數據結構在哪裏?
- 2. 實踐中的高級數據結構
- 3. 高級C#重構
- 4. 高效的數據結構
- 5. 高效的數據結構
- 6. 高效的數據結構
- 7. html數據屬性中的高級數據結構
- 8. Hadoop FairScheduler的高級內部數據結構和算法?
- 9. 數據結構之前OOP所需的高級知識?
- 10. 通過更高一級的結構
- 11. 高效的MongoDB數據庫結構
- 12. 高效的列表數據結構
- 13. 排行榜的高效數據結構
- 14. 最高效的Java數據結構
- 15. Maple中的高效數據結構
- 16. 高效的MySQL數據庫結構
- 17. Zobrist鍵的高效數據結構
- 18. Drupal數據庫結構 - 高效/低效?
- 19. 高效刪除樹數據結構
- 20. C++:高級函數定義
- 21. 使用來自C的更高級Python結構
- 22. C++中高效的輸出數據結構
- 23. Armadillo C++: - 高效訪問多維數據集結構中的列
- 24. 在golang中用neast和數組創建高級結構
- 25. 高級定價數據
- 26. 高級iOS數據庫
- 27. 高級數據複製
- 28. 高級JTable數據列表
- 29. 高級數據分隔符
- 30. Excel,高級數據合併
http://stackoverflow.com/questions/201413/c-analog-to-stl – darlinton