typedef int size_type;
/*
vector维护的是一个连续线性空间,提供的迭代器是Random Access Iterators即普通指针
*/
template <class T,class Alloc=alloc>
class vector
{
protected:
iterator start;//目前使用空间的头
iterator finish;//目前使用空间的尾
iterator end_of_storage;//目前可用空间的尾
public:
void push_back(const T& x);
void insert_aux(iterator position, const T& x);
int size()const{ return int(end() - begin()); }
}; /*
vector动态增加大小,并不是在原空间之后开辟新空间,因为无法保证原空间之后尚有可供配置的空间,而是以
原大小的两倍另外配置一块较大空间,然后将原内容拷贝过来,然后才开始在原内容之后构造新元素,并释放原空间
*/
template<class T,class Alloc=alloc>
void vector::push_back(const T& x)
{
if (finish != end_of_storage)
{
construct(finish, x);
++finish;
}
else//已无备用空间
insert_aux(end(), x);
} template<class T, class Alloc = alloc>
void vector<T, Alloc>::insert_aux(iterator position, const T& x)
{
const size_type old_size = size();
const size_type len = old_size != ? * old_size : ;
/*
配置原则:若原空间大小为0,则配置一个元素大小,否则配置原大小的两倍
前半段用来放置原数据,后半段用来放置新数据
*/
//data_allocator为vector专有的空间配置器
iterator new_start = data_allocator::allocate(len);
iterator new_finish = new_start;
//将原vector的内容拷贝到新vector
new_finish = uninitialized_copy(start, position, new_start);
//为新元素设定初值x
construct(new_finish, x);
++new_finish; //析构并释放原vector
destroy(begin(), end());
deallocate(); //调整迭代器
start = new_start;
finish = new_finish;
end_of_storage = new_start + len;
}

最新文章

  1. Word中一些问题解决
  2. Excel 取得一定范围内最大的有值的行号
  3. oracle权限
  4. 【UVA 11354】 Bond (最小瓶颈生成树、树上倍增)
  5. bestcoder.hdu.edu.cn
  6. Linux 挂载NTFS文件系统
  7. c# 应用NPOI 获取Excel中的图片,保存至本地的算法
  8. Java JMS 程序基础 与 ActiveMQ 安装(一)
  9. Linux系统的磁盘管理
  10. Docker Mysql数据库双主同步配置方法
  11. vue,在模块中动态添加dom节点,并监听
  12. noip 2017 时间复杂度
  13. Redis高可用之哨兵模式Sentinel配置与启动(五)
  14. SQL中树形分层数据的查询优化
  15. 基于Deep Learning的中文分词尝试
  16. Linq to SQL 练习
  17. Html.BeginForm() vs Ajax.BeginForm() in MVC3
  18. eclipse集成testng插件(离线安装方式)
  19. EF 序列化实体为Json时的循环引用问题(不用自己写实体,不用匿名类型,不用EF的上下文属性)
  20. 使用POI导出excel进阶篇

热门文章

  1. LeetCode 要记得一些小trick
  2. exe4j将可执行的jar封装成exe文件
  3. ionic3带参数返回原来页面
  4. 鼠标拖拽移动Java界面组件
  5. java树型结构的数据展现设计
  6. Codeforces_758_D_(区间dp)
  7. swift protocol 与类继承结合时的bug
  8. Call stack Structure
  9. iOS App Crash原理分析
  10. vue基础---实例