作者dryman (dryman)
看板EE_DSnP
标题[问题] Hash constructor
时间Fri Jan 8 21:09:18 2010
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
1F:推 timrau:改capacity请使用reserve(); resize後iterator仍然有效 01/08 22:19
2F:→ timrau:纯属运气好,除了list(deque可能也行)以外请别这样做... 01/08 22:19
3F:→ timrau:"C++ Standard Library"一书中皆有说明 01/08 22:20
4F:→ dryman:後来发现这个capacity跟我们实做adt.array时不同 01/08 22:41
5F:→ dryman:因为vector实际上是alloc max_size这麽大的空间 01/08 22:42
6F:→ dryman:我使用resize()时max_size是一样的 01/08 22:42
7F:→ dryman:耶? 我推的好像还是有错误的样子.. 01/08 22:44
8F:→ dryman:如一楼所说,改capacity应该用reserve() 01/08 22:45
9F:→ dryman:capacity还是alloc的大小,不过可以用reserve更改大小 01/08 22:46
10F:→ dryman:the true limit of vector is vector::max_size 01/08 22:47
11F:推 ric2k1:Hash() 是 default constructor, 比方说像是 BddMgr 的 01/08 22:58
12F:→ ric2k1:constructor 会先呼叫这个 constructor 然後在 init() 里头 01/08 22:59
13F:→ ric2k1:才去呼叫 Hash 的 init() 去 allocate buckets. 01/08 23:00
14F:→ ric2k1:是不 safe,所以你 Hash 里的 function 应该要检查_buckets 01/08 23:01
15F:→ ric2k1:是否为 NULL 01/08 23:02
16F:→ dryman:喔喔,soga! 01/08 23:04
17F:推 slinh:喔喔 01/08 23:05