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

徐州市 两学一做网站官方入口

徐州市 两学一做网站,官方入口,推广公司网站,wordpress 添加编辑器一、vector的常见用法 注&#xff1a;C中若使用vector需包含头文件<vector>. 1.vector的构造函数 int n 10,ret1;vector<int> nums(n,ret); //n表示vector初始的容量 ret表示vector中初始化的值for (auto e : nums)cout << e << " "; 扩展…

一、vector的常见用法

        注:C++中若使用vector需包含头文件<vector>.

1.vector的构造函数

	int n = 10,ret=1;vector<int> nums(n,ret);	//n表示vector初始的容量 ret表示vector中初始化的值for (auto e : nums)cout << e << " ";

扩展:vector<type>可以放入任意类型

如vector<vector<int> >,vecotr<string>,vector<pair<int,int> >等,效果是一样的;

2.迭代器

在现在的大多数编译器中是支持vector使用迭代器的,如图所示

3.拷贝构造

        vector的拷贝构造具有很好的实用性,需要创建一个原数组的临时变量时,这个函数就极大减少了我们创建新vector进行赋值的时间,与此同时,我们还可以对其中一项vector进行赋值操作,如下面注释内容中v=nums(此处的 = 为我们的运算符重载)。

	int n = 4,m=5,ret=6;vector<vector<int>> nums(n,vector<int>(m,ret));	//n,m表示vector初始的容量 ret表示vector中初始化的值vector<vector<int> > v(nums);		//将nums内容拷贝到v上//常见写法vector<vector<int> > v;//v=nums;for (int i = 0; i < n; i++){for (int j = 0; j < m; j++){cout << v[i][j] << " ";}cout << endl;}

4.reserve(size_t n)函数

        reserve函数是一个预扩容函数,可以为vector对象重新扩容,从而提高了vector的性能,在后面的insert函数和push_back等函数中会用到reserve这个函数。

5.resize(size_t n, const T& val = T())

        resize的功能就是重置数组的大小。功能效果如图所示

6.push_back(const T& x)

        push_back的功能就是在vector后面插入一个数据x,vector长度会自动+1,capacity(容量)不足时会自动扩容(注:这里的扩容量不定,是由编译器内部实现决定的)。效果图如下:

7.pop_back()

        这个函数的功能就是删除vector中最后一项元素,vector长度-1。效果图如下:

8.[size_t pos]运算符重载

        该函数的功能是返回vector容器中pos位置元素的值(引用返回),因此这里我们就既可以查看pos位置的值也可以修改pos位置的值;效果图:

9.insert(iterator pos, const T& x)

        功能在pos位置(此处的pos为迭代器插入方式应为nums.insert(nums.begin()+pos,x) )插入x值,由于每次插入一般都需移动vector时间成本高,所以在算法题中比较少见。(算法中常用push_back());用法如图所示:

10.erase(iterator pos)

        功能在pos位置(此处的pos为迭代器插入方式应为nums.erase(nums.begin()+pos) )删除x值,由于每次删除一般都需移动vector时间成本高,所以在算法题中比较少见。(算法中常用pop_back());用法如图所示:

11.size()

        这个函数非常实用无论是在算法题上,还是在自己敲代码时实现某些功能时这个函数都很常见,功能就是得到vector的长度。效果图:

12.capacity()

        这个函数在做算法题时不怎么常用,但还是需要了解一下。显而易见,功能就是得到vector的容量大小。效果图:

二、vector的模拟实现

由STL库中可见,vector内部是由三个指针来实现的:

        _start所在位置为vector起始位置;

        _finish所在位置为vector长度终止位置及size+1处;

        _endofstorage所在位置为vector容量终止位置。

1.vector内部值初始化

namespace lwf 
{template <class T>class vector{public:typedefy T* iterator;typedefy const T* const_iterator;private:iterator _start = nullptr;iterator _finish = nullptr;iterator _endofstoage = nullptr;};
}

2.vector的构造函数

        vector(size_t n, const T& val = T()){resize(n, val);}vector(int n, const T& val = T()){resize(n, val);}

3.迭代器

		iterator begin(){return _start;}iterator end(){return _finish;}//const 迭代器const_iterator begin()const{return _start;}const_iterator end()const{return _finish;}//迭代器的实现template <class InputIterator>vector(InputIterator first, InputIterator last){while (first != last){push_back(*first);++first;}}

4.拷贝构造

		//拷贝构造vector(const vector<T>& v){_start = new T[v.capacity()];for (size_t i = 0; i < v._size(); i++){_start[i] = v._start[i];}_finish = _start + v.size();_endofstorage = _start + v.capacity();}void swap(vector<T> v){std::swap(_start, v._start);std::swap(_finish, v._finish);std::swap(_endofstorage, v._endofstorage);}vector operator=(vector<T> v){swap(v);return *this;}

5.reserve(size_t n)函数

		void reserve(size_t n){if (n > capacity()){size_t sz = size();T* tmp = new T[n];if (_start){for (size_t i = 0; i < size(); i++){tmp[i] = _start[i];}delete[] _start;}_start = tmp;_finish = _start + sz;_endofstorage = _start + n;}}

6.resize(size_t n, const T& val = T())

		void resize(size_t n, const T& val = T()){if (n > size()){reserve(n);while (_finish != _start + n){*_finish = val;++_finish;}}else{_finish = _start + n;}}

7.push_back(const T& x)

		void push_back(const T& x){insert(end(), x);}

8.pop_back()

		void pop_back(){erase(--end());}

9.[size_t pos]运算符重载

		T& operator[](size_t pos){assert(pos < size());return _start[pos];}//const 类型const T& operator[](size_t pos)const{assert(pos < size());return _start[pos];}

10.insert(iterator pos, const T& x)

		iterator insert(iterator pos, const T& x){assert(pos <= _finish && pos >= _start);if (_finish == _endofstorage){size_t len = pos-_start;size_t newcapacity= capacity() == 0 ? 4 : 2 * capacity();reserve(newcapacity);//解决迭代器失效问题pos = _start + len;}iterator end = _finish - 1;while (end >= pos){*(end + 1) = *end;--end;}*pos = x;++_finish;return pos;}

11.erase(iterator pos)

		iterator erase(iterator pos){assert(pos >= _start && pos < _finish);iterator it = pos + 1;while (pos != _finish){*(pos - 1) = *pos;++pos;}--_finish;return pos;}

12.size()

		size_t size(){return _finish - _start;}

13.capacity()

		size_t capacity(){return _endofstorage - _start;}

14.析构函数

		~vector(){if (_start){delete[] _start;_start = _finish = _endofstorage = 0;}}

三、整体的实现

        整体的代码仅供参考,只是为了加强自己的记忆力和代码能力,从而个人实现了vector的一些基础的功能

#pragma once#include <assert.h>namespace lwf
{template <class T>class vector{public:typedef T* iterator;typedef const T* const_iterator;iterator begin(){return _start;}iterator end(){return _finish;}const_iterator begin()const{return _start;}const_iterator end()const{return _finish;}size_t capacity(){return _endofstorage - _start;}size_t size(){return _finish - _start;}vector(size_t n, const T& val = T()){resize(n, val);}vector(int n, const T& val = T()){resize(n, val);}template <class InputIterator>vector(InputIterator first, InputIterator last){while (first != last){push_back(*first);++first;}}vector(){}//拷贝构造vector(const vector<T>& v){_start = new T[v.capacity()];for (size_t i = 0; i < v._size(); i++){_start[i] = v._start[i];}_finish = _start + v.size();_endofstorage = _start + v.capacity();}void swap(vector<T> v){std::swap(_start, v._start);std::swap(_finish, v._finish);std::swap(_endofstorage, v._endofstorage);}vector operator=(vector<T> v){swap(v);return *this;}~vector(){if (_start){delete[] _start;_start = _finish = _endofstorage = 0;}}void reserve(size_t n){if (n > capacity()){size_t sz = size();T* tmp = new T[n];if (_start){for (size_t i = 0; i < size(); i++){tmp[i] = _start[i];}delete[] _start;}_start = tmp;_finish = _start + sz;_endofstorage = _start + n;}}void resize(size_t n, const T& val = T()){if (n > size()){reserve(n);while (_finish != _start + n){*_finish = val;++_finish;}}else{_finish = _start + n;}}void push_back(const T& x){insert(end(), x);}void pop_back(){erase(--end());}T& operator[](size_t pos){assert(pos < size());return _start[pos];}const T& operator[](size_t pos)const{assert(pos < size());return _start[pos];}iterator insert(iterator pos, const T& x){assert(pos <= _finish && pos >= _start);if (_finish == _endofstorage){size_t len = pos-_start;size_t newcapacity= capacity() == 0 ? 4 : 2 * capacity();reserve(newcapacity);//解决迭代器失效问题pos = _start + len;}iterator end = _finish - 1;while (end >= pos){*(end + 1) = *end;--end;}*pos = x;++_finish;return pos;}iterator erase(iterator pos){assert(pos >= _start && pos < _finish);iterator it = pos + 1;while (pos != _finish){*(pos - 1) = *pos;++pos;}--_finish;return pos;}private:iterator _start = nullptr;iterator _finish = nullptr;iterator _endofstorage = nullptr;};}

四、感言

        由于一些学业上的原因断更了半个学期,在这里感谢各位大佬和友友们的支持,不介意的话给我点个赞再走吧!

http://www.dtcms.com/wzjs/833355.html

相关文章:

  • 微信自媒体网站建设宁波企业网站搭建图片
  • 什么是营销型企业网站旅游景区规划设计公司
  • 销售网站设计搜索引擎查询
  • 公司网站制作都需要图片网站建设合同详细
  • 网站续费模版什么网站建设最便宜
  • 哪里有免费网站空间申请哪家做的濮阳网站建设
  • 青岛建设集团网站常州城乡建设局网站
  • 实体店面做网站推广要多少钱销售型企业有哪些公司
  • 在游戏网站做中介合法中小企业管理培训班
  • 最佳经验网站网站建设服务器如何选择
  • 开发网站的过程福建住房和城乡建设部网站
  • 建立网站要花多少钱外贸公司取什么名字好
  • 做网站需要多少空间阳信县住房和城乡建设局网站
  • 网站建设兼职招聘织梦怎么建设论坛网站
  • 海南建设银行官方网站宁波市市建设法规颁发网站
  • 济宁鱼台网站建设深圳seo公司
  • 网站备案信息批量查询网站建设问题新闻资讯
  • 做携程网站的技术中国手机最好的网站排名
  • 烟台网站建设联系电话华亭县建设局网站2017
  • 个人备案企业网站经典的jq查询网站
  • 网站备案登记做品牌网站哪个好用
  • 上海html5网站建设wordpress 轻云
  • 常州微信网站建设网站建设与运营的公司
  • 熊掌号怎么域名做网站深圳住房和建设部网站
  • 密云成都网站建设app开发公司官网
  • 一个数据库怎么做二个网站安装wordpress 空白
  • 荣成信用建设官方网站wordpress前端可视化编辑
  • 哪个网站可以做代码题目网站信息评估抽查
  • 网站 设计公司 温州seo怎么优化一个网站
  • 拼多多刷单网站开发平安网站建设公司