[問題] Hash constructor

看板EE_DSnP作者 (dryman)時間14年前 (2010/01/08 21:09), 編輯推噓3(3014)
留言17則, 4人參與, 最新討論串1/1
Hash的constructor長這樣: Hash(): _numBuckets(0), _buckets(0) {}; Hash(size_t b) : _numBuckets(0), _buckets(0) { init(b); } 這樣會不會不safe啊? 沒有用Hash( a number) 的話就會生出一個完全不能用的Hash 沒有init.. 還是說這種constructor有別的用意? BTW vector真是一種神奇的STL 因為resize前後(capacity有改變) iterator指到的東西都一樣 [] access到的東西也沒變 vector還有一個get_allocator()的function/method 可以這麼用 vector<int> myvector; // initial capcity = 0; int *p=myvector.get_allocator().allocate(5); // myvector.capcity = 5; 我想應該還有其他的private member來處理access的問題 而iterator的private member應該不是*int而可能是**int(吧?) 這樣更改中間*int的值就可以正確的指向改變得資料了 不過這部份沒有繼續查下去,只是我的猜測啦:p 有請強者補充囉:) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.45.253.90

01/08 22:19, , 1F
改capacity請使用reserve(); resize後iterator仍然有效
01/08 22:19, 1F

01/08 22:19, , 2F
純屬運氣好,除了list(deque可能也行)以外請別這樣做...
01/08 22:19, 2F

01/08 22:20, , 3F
"C++ Standard Library"一書中皆有說明
01/08 22:20, 3F

01/08 22:41, , 4F
後來發現這個capacity跟我們實做adt.array時不同
01/08 22:41, 4F

01/08 22:42, , 5F
因為vector實際上是alloc max_size這麼大的空間
01/08 22:42, 5F

01/08 22:42, , 6F
我使用resize()時max_size是一樣的
01/08 22:42, 6F

01/08 22:44, , 7F
耶? 我推的好像還是有錯誤的樣子..
01/08 22:44, 7F

01/08 22:45, , 8F
如一樓所說,改capacity應該用reserve()
01/08 22:45, 8F

01/08 22:46, , 9F
capacity還是alloc的大小,不過可以用reserve更改大小
01/08 22:46, 9F

01/08 22:47, , 10F
the true limit of vector is vector::max_size
01/08 22:47, 10F

01/08 22:58, , 11F
Hash() 是 default constructor, 比方說像是 BddMgr 的
01/08 22:58, 11F

01/08 22:59, , 12F
constructor 會先呼叫這個 constructor 然後在 init() 裏頭
01/08 22:59, 12F

01/08 23:00, , 13F
才去呼叫 Hash 的 init() 去 allocate buckets.
01/08 23:00, 13F

01/08 23:01, , 14F
是不 safe,所以你 Hash 裏的 function 應該要檢查_buckets
01/08 23:01, 14F

01/08 23:02, , 15F
是否為 NULL
01/08 23:02, 15F

01/08 23:04, , 16F
喔喔,soga!
01/08 23:04, 16F

01/08 23:05, , 17F
喔喔
01/08 23:05, 17F
文章代碼(AID): #1BHow0WI (EE_DSnP)