必须要注意的c动态内存资源管理(六)vector的简单实现

必须要注意的c动态内存资源管理(六)vector的简单实现

ID:32945790

大小:81.27 KB

页数:17页

时间:2019-02-18

必须要注意的c动态内存资源管理(六)vector的简单实现_第1页
必须要注意的c动态内存资源管理(六)vector的简单实现_第2页
必须要注意的c动态内存资源管理(六)vector的简单实现_第3页
必须要注意的c动态内存资源管理(六)vector的简单实现_第4页
必须要注意的c动态内存资源管理(六)vector的简单实现_第5页
资源描述:

《必须要注意的c动态内存资源管理(六)vector的简单实现》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、必须要注意的C++动态内存资源管理(A)vector的简单实现myVector分析我们知道,vector类将英元素存放在连续的内存中。为了获得可接受的性能,vetor预先分配足够大的内存来保存可能需要的更多元素。vector的每个添加元素的成员函数会检杳是否有空间容纳更多的元素。如果有,成员函数会在下一个可用位置构造一个对象。如果没有可用空间,vector就会重新分配空间;它获得新的空间,将已有元素移动到新空间中,释放旧空间,并添加新元素。既然是动态开辟的内存,于是我们在myVector中使用动态数组來存储,而每次插入元素的时候需要先判断开辟的内存是否已满,如果满了需耍重新分配内存。下面

2、给出最初版本的代码://myVector.h#include<memory>template<typenamet二””>classmyVector{public:typedefmyVector<t>_Myt;myVector():elements(nullptr),first_free(nullptr),cap(nullptr){}//allocator成员进行默认初始化myVector(const_Myt&);_Myt&operator=(const_Myt&);"myVector();T&operator[](siz

3、e_ti){return*(elements+i);}voidpush_back(constT&);//添加元素size_tsize()const{returnfirst__free・elements;}size_tcapacity()const{returncap・elements;}T*begin()const{returnelements;}T*end()const{returnfirst_free;}voidchk_n()private:〃被添加元素函数使用if(size()==capacity())reallocate();std::pair>n_copy(con

4、stT*,constT*);〃被拷贝构造,赋值运算符,析构函数使用voidfree();〃销毁元素并释放内存voidreallocate();〃获得更多内存并拷贝已有元素T*elements;T*first_free;T*cap;};template<typenamet="">myVector<t>::myVector(const_Myt&v)〃调用alloc_n_copy分配空间以容纳与s屮一样多的元素autonewdata=n_copy(v.begin(),v.endf));elements=newdata.first;first_free=cap=n

5、ewdata.second;}template<typenamet="">myVector<t>::"myVector()free();template<typenamet="">myVector<t>&myVector<t>::operator=(const_Myt&rhs)〃调用alloc_n_copy分配内存'大小与rhs一样.autodata=n_copy(rhs.begin(),rhs.end());free();elements=data.first;first_free=cap=data.secon

6、d;return*this;template<typenamet=,H,>std::pair<t*,>myVector<t>::n_copy(constT*b,constT*e)autodata=newT[e-b];for(autoi=b;i<e;i++)data[i-b]=*i;return{data,data+(e-b)};}template<typenamet二”">voidmyVector<t>::push_back(constT&s)chk_n();〃确保己有新空间*(first_free++)=s;te

7、mplate<typenamet=,H,>voidmyVector<t>::free()delete[]elements;template<typenamet="">voidmyVector<t>::reallocate(){〃我们将分配当前大小两倍的内存空间autonewcapacity=size()?2*size():1;〃分配新内存autonewdata=newT[newcapa

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。