作者:岳知涵
在NOIP中,C++的容器的用途非常广泛,但经常因常数过大而超时。怎样才能提高它们的效率呢?我们知道,容器是存储同一类对象的对象,既然“对象”我们无法改变,那么我们只能从“存储”入手,不难想到,不同容器在实现上的根本区别是它们对应着不同的内存组织方式,内存管理无疑是这种实现的核心,所以优化内存管理是加快容器效率的最好途径之一。
一、内存分配器简介怎样才能优化内存管理呢?很简单,C++为我们提供了这样的接口,我们可以通过自定义容器模板中的最后一个allocator内存分配器来提高容器效率,在默认情况下,alloc为allocator<T>,allocator<T>是C++的用于泛型化内存分配的模板,它在申请小空间时通常很快(比new运算符快一些),又因为自定义一般化的内存分配器(可自行查询“内存池”的资料)需要较大的代码量,而且效率未必高,所以本文我们只讨论某些特殊情况下的内存分配。
二、编写内存分配模板下面我们来编写一个简单的内存分配器,为了简单起见,我们继承C++的allocator<T>:
template<typename T>
struct myalloc:allocator<T>
构造函数是必不可少的:
myalloc(){}
template<typename T2>//别忘记写模板,下同
myalloc(const myalloc<T2> &a){}
template<typename T2>
myalloc<T>& operator=(const myalloc<T2> &a)
{
return *