请教关于模板类中allocator类的声明方法

qq_32019195 2018-04-01 11:56:03
代码出自书本《accelerated C++》11章,错误输出如图 41行即是定义allocator变量那一行,不知道我这样定义哪里不对,请大神粑粑们明示,提前谢过。
#pragma once
#include<memory>

template <class T> class Vec
{
public:
typedef T* iterator;
typedef const T* const_iterator;
typedef size_t size_type;
typedef T value_type;

//构造函数。需要调用create()分配内存
Vec(){create();}
explicit Vec(size_type n,const T&t=T()){create(n,t);}

Vec(const Vec& v){create(v.begin(),v.end());}
Vec& operator=(const Vec&);
T& operator[](size_type i){return data[i];}
const T& operator[](size_type i)const{return data[i];}
~Vec(){uncreate();}

//添加元素
void push_back(const T& t);

//获得容器元素数
size_type size() const{return avail-data;}

//获得首指针
iterator begin(){return data;}
const_iterator begin() const{return data;}

//获得尾指针
iterator end(){return avail;}
const_iterator end() const{return avail;}

private:
iterator data; //Vec中的首元素
iterator avail; //Vec中的末元素最后一个元素
iterator limit; //分配过内存的最后一个元素后面一个元素

allocator<T> alloc; //控制内存分配的对象。第41行

//分配内存并进行初始化
void create();
void create(size_type,const T&);
void create(const_iterator,const_iterator);

//删除容器中的元素并释放内存
void uncreate();

//push_back所需的函数
void grow();
void unchecked_append(const T&);

};
...全文
560 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yshuise 2018-04-07
  • 打赏
  • 举报
回复
你应该把内存分配器作为模板参数,才更灵活。
qq_32019195 2018-04-01
  • 打赏
  • 举报
回复
qq_32019195 2018-04-01
  • 打赏
  • 举报
回复
qq_32019195 2018-04-01
  • 打赏
  • 举报
回复
qq_32019195 2018-04-01
  • 打赏
  • 举报
回复
引用 4 楼 qq_30918465的回复:
std:: 是不是没有引用命名空间
是这个原因 改过来了 谢谢了
永远的追梦人 2018-04-01
  • 打赏
  • 举报
回复
std:: 是不是没有引用命名空间

64,632

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧