当前位置: 首页 > wzjs >正文

建站推荐网站网站建设的步骤及方法

建站推荐网站,网站建设的步骤及方法,网站规划模板下载,个人微商城怎么开通目录 1.构造函数 (1)无参构造 (2)带参构造函数 (3)用迭代器构造初始化函数 (4)拷贝构造函数 2.operator= 3.operator[] 4.size() 5.capacity() 6.push_back 7.reserve 8.迭代器(vector的原生指针) 9.resize 10.pop_back 11.insert 12.erase 13.memcpy…

目录

1.构造函数

(1)无参构造

(2)带参构造函数

(3)用迭代器构造初始化函数

(4)拷贝构造函数 

 2.operator=

3.operator[]

4.size()

5.capacity()

6.push_back

 7.reserve

 8.迭代器(vector的原生指针)

9.resize

10.pop_back

11.insert

12.erase

13.memcpy替换为深拷贝


 大致框架

namespace zbw
{template <class T>class vector{public:typedef T* iterator;private:iterator _start;iterator _finish;iterator _end_of_storage;};
}

1.构造函数

(1)无参构造

	vector():_start(nullptr), _finish(nullptr), _end_of_storage(nullptr){}

(2)构造n个val

	vector(size_t n,const T& val = T())//const延长匿名对象的生命周期:_start(nullptr), _finish(nullptr), _end_of_storage(nullptr){reverse(n);for (int i = 0; i < n; i++){push_back(val);}}

匿名对象生命周期只有这一行,调用完匿名函数后会调用析构函数将其析构

但引用会延长匿名对象的生命周期到引用对象域结束,由于匿名对象具有常性,所以需要用const修饰,此时调用完匿名对象,并不会调用析构函数释放

(3)用迭代器构造初始化函数

	tmplete <class InputIterator>vector(InputIterator first,InputIterator last):_start(nullptr), _finish(nullptr), _end_of_storage(nullptr){while (first != last){push_back(*first);first++;}}

使用迭代器模板,就可以传任意类型的迭代器,否则只能使用vector的迭代器

起名为InputIterator,是因为函数模板的模板参数要传迭代器区间时,是存在命名规范的

InputIterator这种迭代器所指的对象为“只读”,不允许外界更改

(4)拷贝构造函数 

传统写法

	vector(const vector<T>& v)//v2(v1){_start = new T[v.capacity()];_finish = _start + v._size();_end_of_storage = _start + v._capacity;memcpy(_start, v._start, v.size() * sizeof(T));}

开一块和v1一样大的空间,再把v1的数据拷贝到新空间里去

现代写法 

	void swap(vector<T>& v){std::swap(_start, v._start);std::swap(_finish, v._finish);std::swap(_end_of_storage, v._end_of_storage);}vector(const vector<T>& v)//v2(v1){vector<T> tmp(v.begin(), v.end());swap(tmp);}

 利用迭代器初始化的构造函数,用v1创造一个临时变量tmp,再将v2与tmp交换,tmp出了作用域就调用析构函数销毁

最终版本:(防止浅拷贝)

vector(const vector<T>& v)//拷贝构造
{reserve(v.capacity());for (size_t i = 0; i < v.size(); i++){_start[i] = v._start[i];//使用默认的赋值运算符会发生浅拷贝}_finish = _start + v.size();
}

 2.operator=

现代写法

	void swap(vector<T>& v){std::swap(_start, v._start);std::swap(_finish, v._finish);std::swap(_end_of_storage, v._end_of_storage);}vector<T>& operator=(const vector<T> v)//v3 = v1{swap(v);return *this;}

利用传值传参拷贝构造v(此时v就是v1),再将v3与v1交换,v是临时对象除了作用域会调用析构函数销毁

3.operator[]

	T& operator[](size_t i){assert(i < size())
http://www.dtcms.com/wzjs/569762.html

相关文章:

  • 做网站用什么软件啊订阅号自定义可以做链接网站不
  • 做网站经费如何在wordpress中添加背景音乐
  • 网站建设项目的工期计划江苏省城乡住房建设厅网站
  • 网站建设负责人证明地产行业型网站开发
  • 秦皇岛网站制作人才招聘网站建设的主题
  • asp企业营销型网站建设微营销课程
  • 单位网站开发费用进什么科目无锡做网站公司有哪些
  • 郑州建设网站公司wordpress 转小程序
  • 江苏付费网络推广培训网站seoapp
  • 物联网应用前景常州建站优化
  • 免费搭建永久网站步骤用摄像头直播网站怎么做
  • 常州微信网站建设效果天河建设网站设计
  • 上海微网站建设wordpress边栏时间
  • 四川欧瑞建设集团网站php企业网站开发实验总结
  • 通辽网站建设招聘wordpress添加下文件
  • 网站内容的作用360网站拦截做
  • 骨干专业建设验收网站站长网
  • 营销网站制作多少钱做视频网站收费侵权吗
  • 模板做网站网站建设个人兼职
  • 做一个手机购物网站多少钱关注网站制作
  • 河北三河建设局网站网站logo提交
  • 网站首页模板下载网站建设开发报价方案
  • 温州网站建设哪家公司好青岛地产网站建设
  • 怎么给自己做个网站吗wordpress删除目录按固定连接
  • 企业单页网站模板12306网站建设花了多少钱
  • 建设银行 网站首页手机端网站开发源码
  • 厦门市建设区网站首页有哪个网站做正品港货
  • 浙江住房与城乡建设部网站个人导航页模板
  • 网站如何做新闻聚合wordpress聊天系统
  • 仿站工具哪个好最好常州制作网站信息