|
|
/*
IdentityGenerator的作用是生成ID号, 调用operator () 时,从头开始查找第一个没有被使用的ID,然后返回此ID
unregister(int id)的作用就是注销某id号,
*/
// template class IdentityGenerator
template <size_t UpperBound>
class IdentityGenerator {
public :
void unregister(int id);
int operator() ();
static const int invalid_id = -1;
private:
bitset<UpperBound> used;
};
template <size_t UpperBound>
const int IdentityGenerator<UpperBound>::invalid_id;
template <size_t UpperBound>
int IdentityGenerator<UpperBound>: perator() () {
if (used.count() == UpperBound)
return invalid_id;
int i = 0;
while (used) i++;
used = true;
return i;
}
template <size_t UpperBound>
void IdentityGenerator<UpperBound>::unregister(int id)
{
assert((id >= 0) && (id < UpperBound));
used[id] = false;
}
IdentityGenerator<1024> idGenerator;
int main()
{
for (int i = 0; i<5; i++)
cout << idGenerator() << endl;
idGenerator.unregister(3);
idGenerator.unregister(2);
// 为什么下面两种输出方式结果不一样
cout << idGenerator() << endl;
cout << idGenerator() << endl;
cout << idGenerator() << endl;
/* !跟想像中的输出不一样!
前面的for生成5个id,接着注销id号3和2
接着再生成3个id时,为什么两种输出方式输出结果不一样
*/
/*
cout << idGenerator() << endl
<< idGenerator() << endl
<< idGenerator() << endl;
*/
}
第一种输出为:
0
1
2
3
4
2
3
5
是我想要的结果
为什么第二种输出却是这样的?
0
1
2
3
4
5
3
2 |
|