您的位置:首页 > 编程语言

深入模板编程笔记四

2014-11-15 18:09 162 查看
template <typename T>
class my_vector {
public:
T* array;
unsigned size;
unsigned block_size;

public:
my_vector(unsigned bsz):
array((T*)malloc(sizeof(T)*bsz)),size(0), block_size(bsz){}
~my_vector() {if (array) free(array);}

void push_back(T const& elem) throw(std::runtime_error) {
if (size == block_size) {//已有空间用完,申请更大空间
block_size *= 2;
T* new_array = (T*)realloc(array, block_size*sizeof(T));
if (new_array!= NULL) array = new_array;
else {
//申请失败,内存耗尽
free(array);
array = NULL;
throw std::runtime_error("out of memory.");
}
}
array[size++] = elem;
}

T& operator[] (unsigned i) {return array[i];}
const T& operator[] (unsigned i) const {return array[i];}
unsigned get_mem_size() const {return block_size*sizeof(T);}
};
//这是一个用木板封装的容器
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: