bitSet a; // 錯誤:缺少模板參數
bitSet b; // 錯誤
bitSet 是模板類 template <class T> class bitSet,實例化時必須提供具體類型,如 bitSet<int> a;。
bitSet<int> a; // T = int
bitSet<string> b; // T = string
bitSet<MyClass> c; // T = 自定義類型
template <class T> class bitSet { ... }; — 此處 T 是佔位符,不寫具體類型。template <class T> void bitSet<T>::func() { ... } — 必須帶 <T> 指明屬於哪個實例化版本。bitSet<int> obj; — 必須填入實際類型參數。#include <iostream>
#include <cassert>
using namespace std;
template <class T>
class bitSet {
int setSize, vectorSize;
unsigned short *bitVector;
public:
bitSet(int sz = 50) : setSize(sz) {
vectorSize = (setSize + 15) >> 4;
bitVector = new unsigned short[vectorSize]();
}
~bitSet() { delete[] bitVector; }
bool add(T x) {
if (x < 0 || x >= setSize) return false;
int ad = x / 16, id = x % 16;
bitVector[ad] |= (1 << (15 - id));
return true;
}
bool contains(T x) const {
if (x < 0 || x >= setSize) return false;
int ad = x / 16, id = x % 16;
return (bitVector[ad] >> (15 - id)) & 1;
}
};
int main() {
bitSet<int> a;
a.add(5);
cout << a.contains(5) << endl; // 1
return 0;
}