我是新來的haskell,所以我試圖在haskell中重新創建以下C++代碼。我應該使用哪個容器?
int main() {
class MyClass {
public:
int a;
std::string s;
float f;
};
std::vector <MyClass> v;
LoadSerialized(&v); // don't need haskell equivalent; just reads a bunch of MyClass's and pushes them back onto v
}
現在,我已經看了哈斯克爾各種容器可能工作爲的std ::向量的位置:有名單,未裝箱向量,向量盒裝,以及外國指針像下面這樣的一些奇怪的用法:現在
data Table = Table { floats :: ForeignPtr CFloat
, ints :: ForeignPtr Int }
newTable :: IO Table
newTable = do
fp <- S.mallocByteString (floatSize * sizeOf (undefined :: CFloat))
ip <- S.mallocByteString (intSize * sizeOf (undefined :: Int ))
withForeignPtr fp $ \p ->
forM_ [0..floatSize-1] $ \n ->
pokeElemOff p n pi
withForeignPtr ip $ \p ->
forM_ [0..intSize-1] $ \n ->
pokeElemOff p n n
return (Table fp ip)
,我可以實現在我的思維方式的C++代碼是最好的 - 是一個Haskell新手。或者我可以讓那些對語言更有經驗的人問最好的方式是什麼,因爲對我來說,看起來有一些細微差別在我這裏發生,我錯過了。簡單地說,我想將包含許多數據類型的結構推送到haskell容器中,而我不關心順序。如果有幫助,我將讀取序列化數據到容器中,您可以看到LoadSerialized
。
我不是在C++代碼混合。
(編輯:是的StackOverflow政策,允許通過編輯問題的審查(不小的),它說:「永遠尊重原作者」)
n.b.是的,系統的意圖在於編輯們刪除了不必要的粗魯。 StackOverflow是人們提出和回答編程問題的地方,它不是一個暴露不好的理由的地方。 – dave4420 2012-04-14 17:25:28
粗魯嗎?那是多麼粗魯?這就是爲什麼我不必要地重寫在此之前發佈的問題。 – joshj 2012-04-14 17:27:07
ehird,你比我付出更多的東西(語氣本來就是事實),但我被推翻了。 – joshj 2012-04-14 18:07:54