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

浦东新区网站优化推广中国北京出啥大事了

浦东新区网站优化推广,中国北京出啥大事了,网页设计师考试内容,在网站上做的h5如何发到微信上文章目录vector介绍及使用介绍使用定义迭代器容量增删查改🚩迭代器失效vector模拟实现vector介绍及使用 介绍 1,vector是可变大小的序列容器 2,和数组一样,可以用数组名加下标访问元素,区别是vector是动态实现&#…

文章目录

  • vector介绍及使用
    • 介绍
    • 使用
      • 定义
      • 迭代器
      • 容量
      • 增删查改
    • 🚩迭代器失效
    • vector模拟实现

vector介绍及使用

介绍

1,vector是可变大小的序列容器
2,和数组一样,可以用数组名加下标访问元素,区别是vector是动态实现,它的空间大小会自动处理
3,当新元素插入时,这个数组需要重新分配空间,再把元素都转到新数组里,这个时间开销太大,所以每当新元素插入时,vector并不会每次都重新分配空间
4,vector会分配额外的空间以适应增长,一般为实际的 1.5-2倍 所以尾插都是在常数时间复杂度完成的

使用

vector使用文档,里面有各种接口介绍

定义

构造函数说明
⭐vector()无参构造
⭐vector(const* vector& v拷贝构造
vecor(Inputietrator first,Inputiterator end)迭代器构造

迭代器

iterator说明
⭐begin(),end()分别获得第一个数据位置,最后一个数据下一个位置的 iterator/const_iterator
rbegin(),rend()分别获得最后一个,第一个前面一个,的数据位置的iterator/const_iterator

在这里插入图片描述

容量

函数说明
size获得数据个数
capacity获得空间大小
empty检查是否为空
⭐resize开空间并初始化,改变size
⭐reserve改变capacity
  • 如果知道要用多少空间,可以直接用reserve,减少开销

增删查改

函数说明
⭐push_bcak()尾插
⭐push_pop()尾删
find查找(返回迭代器)
erase删除position位置
swap交换两个swap
⭐operator[]像数组一样访问

🚩迭代器失效

迭代器就是让算法不用管底层结构,实际上就是个指针,或者是对指针封装,当指针指向的位置销毁后,再次使用迭代器就会崩溃
1,扩容引起的

#include <iostream>
#include <vector>
using namespace std;
int main()
{vector<int> v1{ 3, 2, 5, 4, 6 };auto it = v1.begin();//v1.resize(100, 2);//v1.reserve(100);//v1.insert(v1.begin(), 2);//v1.push_back(2);while (it != v1.end()){cout << *it << endl;}return 0;
}

上面注释的都容易改变底层位置,都会扩容,可能变更地址,再次使用it就会崩溃

2,erase引起的失效

#include <iostream>
#include <vector>
using namespace std;
int main()
{vector<int> v2{ 3, 2, 5, 4, 6 };vector<int>::iterator pos = find(v2.begin(), v2.end(),3);v2.erase(pos);cout << *pos << endl;return 0;
}

erase会删除pos位置,导致后面的元素前移,本来是不会崩溃的,
但是万一pos指向最后一个位置,前移后pos指向空了,再使用就会崩
为了防范这种情况,vs直接不准这样用,删除后再用就崩溃

改进,迭代器使用前再赋值即可
//删除所有偶数

#include <iostream>
#include <vector>
using namespace std;
int main()
{vector<int> v3{ 3, 2, 2, 2, 5, 4, 6 };auto it = v3.begin();for (auto e : v3)cout << e << " ";cout << endl;while (it != v3.end()){if (*it % 2 == 0)it = v3.erase(it);elseit++;}for (auto e : v3)cout << e << " ";return 0;
}

3 2 2 2 5 4 6
3 5

erase会返回pos下一个位置迭代器,接收了就好,

vector模拟实现

namespace jib
{template<class T>class vector{public:// Vector的迭代器是一个原生指针typedef T* iterator;typedef const T* const_iterator;iterator begin(){return _start;}iterator end(){return _finish;}const_iterator cbegin(){return _start;}const_iterator cend() const{return _finish;}// construct and destroyvector():_start(nullptr),_finish(nullptr),_endOfStorage(nullptr){}vector(int n, const T& value = T()):_start(nullptr),_finish(nullptr),_endOfStorage(nullptr){reserve(n);while (n--){push_back(value);}//resize(n, value);}template<class InputIterator>vector(InputIterator first, InputIterator last){while(first != last){push_back(*first);first++;}}vector(const vector<T>& v):_start(nullptr),_finish(nullptr),_endOfStorage(nullptr){reserve(v.capacity());iterator it=_start;const_iterator itt = v.cbegin();while (itt != v.cend()){*it++ = *itt++;}_finish = _start + v.size();}vector<T>& operator= (vector<T> v){swap(v);return *this;}~vector(){delete[] _start;_start = _finish = _endOfStorage;}// capacitysize_t size() const{return _finish - _start;}size_t capacity() const{return _endOfStorage - _start;}void reserve(size_t n){if (n > capacity()){T* tmp = new T[n];size_t sz = size();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& value = T()){if (n < size()){_finish = _start + n;return;}if (n > capacity()){reserve(n);}iterator it = _finish;_finish = _start + n;while (it != _finish){*(it) = value;it++;}return;}///////////////access///////////////////////////////T& operator[](size_t pos){ return _start[pos];}const T& operator[](size_t pos)const{return _start[pos];}///////////////modify/////////////////////////////void push_back(const T& x){insert(end(), x);}void pop_back(){erase(--end());}void swap(vector<T>& v){swap(_start, v._start);swap(_finish, v._finish);swap(_endOfStorage, v._endOfStorage);}iterator insert(iterator pos, const T& x){if (_finish == _endOfStorage){size_t possize = pos-_start;size_t newsize = (capacity() == 0) ? 4 : capacity() * 2;reserve(newsize);pos = _start + possize;}iterator end = _finish;while (end > pos){*end = *(end - 1);end--;}*pos = x;++_finish;return pos;}iterator erase(iterator pos){iterator begin = pos;while (begin != _finish){*begin = *(begin + 1);begin++;}--_finish;return pos;}private:iterator _start; // 指向数据块的开头iterator _finish; // 指向有效数据的尾iterator _endOfStorage; // 指向存储容量的尾};
}
#include <iostream>
int main()
{jib::vector<int> v1;v1.push_back(1);v1.insert(v1.begin(), 55);v1.push_back(22);//v1.erase(v1.end());for (auto e : v1){std::cout << e ;}}

与string不用,因为vector可接受各种类型,int,char,stirng甚至vector,所以我们用三个模板类型_start,_finish,_endOfStrorage模拟实现vector,

要刷题可以去看我这篇文章
蓝桥杯刷题vector

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

相关文章:

  • 高端网站建设哪家更专业信息如何优化上百度首页公司
  • 那种网站后台最好企业seo关键词优化
  • 汕头网站定制深圳市社会组织总会
  • 建设银行etc的网站是哪个好电子商务网站建设规划方案
  • 什么是网站建设的三次点击原则怎样做seo搜索引擎优化
  • app上架应用市场需要什么条件seo整站优化解决方案
  • 洛阳市住房和城乡建设网站北京seo站内优化
  • 昆明网站优化广州seo顾问服务
  • 疑问句做网站标题网页版百度云
  • 文化传媒公司网站模板做网站需要多少钱
  • 政府网站建设管理方案快照网站
  • 网站网站制作网站的软文关键词排名推广
  • 电商设计参考网站seo站外推广有哪些
  • 国外b站视频app线上广告推广
  • 网站设计搜索栏怎么做兰州快速seo整站优化招商
  • 湘潭网站推广html网页模板
  • 做直播网站要什么证吗seo优化网站推广
  • .com免费网站怎么做五八精准恶意点击软件
  • 网站设计方案模板千万别手贱在百度上搜这些词
  • 南宁网站seo外包关键词排名查询工具有什么作用?
  • 阿里云的网站建设好不好营销方案网站
  • 维影企业网站管理系统企业网站推广
  • wordpress 评审系统解释seo网站推广
  • wordpress怎么改模版湖南网站建设seo
  • 山东关键词优化推广北京seo结算
  • 网页设计html和css作业源代码湖北短视频搜索seo
  • 广州建设信息网官方网站全网推广的方式有哪些
  • 做设计的搜素材上什么网站网站项目开发流程
  • 衡阳网站排名优化太原竞价托管公司推荐
  • 聊城做网站的网络公司seo怎么优化步骤