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

什么视频网站可以做链接优化seo招聘

什么视频网站可以做链接,优化seo招聘,衡阳网站建设icp备,unsplash素材网站文章目录 一、vector类介绍二、vector中的常用接口三、迭代器失效问题四、vector的使用实例五、vector模拟实现 一、vector类介绍 vector是STL中的一种容器,本质上是顺序表。它和string类的结构很相似,其也有size、capacity、数组等,不同的是…

在这里插入图片描述

文章目录

  • 一、vector类介绍
  • 二、vector中的常用接口
  • 三、迭代器失效问题
  • 四、vector的使用实例
  • 五、vector模拟实现

一、vector类介绍

vector是STL中的一种容器,本质上是顺序表。它和string类的结构很相似,其也有size、capacity、数组等,不同的是string底层只是字符数组,而vector类的底层是可以存储所有数据类型的数组。有了string的经验,我们理解vector就更轻松了。

vector实际上是一个类模板,在使用时,我们需要根据实际要存储的数据类型用<>表明,如vector<int> v1; vector<char> v2; vector<string> v3;等等

tip:vector<char>string看起来似乎没什么区别,但是string会在字符串后自动加\0,而前者不会,同时string中也有一些针对字符串的特殊操作也是vector中没有的。实际中根据我们的需求来选择使用。

二、vector中的常用接口

vector的接口和string中几乎完全一样,使用方法也类似,就简单介绍一下:

vector成员接口说明
size获取数据个数
capacity获取空间容量大小
resize改变vector的size
reserve改变vector的capacity
begin获取第一个数据的迭代器iterator/const_iterator
end获取最后一个数据的下一个位置的迭代器iterator/const_iterator
push_back尾部插入数据
pop_back尾部删除数据
insert插入数据
erase删除数据
swap交换两个vector的数据空间
operator[]使能像数组一样访问vector存储的数据

简单演示:
在这里插入图片描述

三、迭代器失效问题

迭代器的主要作用就是让算法能够不用关心底层数据结构,其底层实际上就是一个指针,或者是对指针进行了封装,比如vector<T>的迭代器就是原生态指针T*。因此迭代器失效就是迭代器底层对应指针所指向的空间被销毁了,类似野指针的道理,使用可能会造成程序崩溃。对于vector,可能会导致其迭代器失效的操作有:resize、reserve、insert、assign、push_back,这些操作可能会进行扩容操作,vector底层旧空间被释放而开辟了一块新空间,则指向旧空间的迭代器就失效了。因此,在以上操作完成之后,如果还想要通过迭代器操作vector中的元素,需要给迭代器重新赋值。举个例子:

#include<iostream>
#include<vector>
using namespace std;
int main()
{vector<int> v = { 1, 2, 3, 4, 5 };vector<int>::iterator it = v.begin();//将有效元素个数调整至10个,多出的位置用0填充,这个操作底层会进行扩容v.resize(10, 0);//此时原来的迭代器it失效,使用程序会崩溃cout << *it;return 0;
}

在这里插入图片描述

#include<iostream>
#include<vector>
using namespace std;
int main()
{vector<int> v = { 1, 2, 3, 4, 5 };vector<int>::iterator it = v.begin();//将有效元素个数调整至10个,多出的位置用0填充,这个操作底层会进行扩容v.resize(10, 0);//此时原来的迭代器it失效,使用程序会崩溃//cout << *it;//给it重新赋值就能解决it = v.begin();while(it != v.end()){cout << *it << ' ';it++;}cout << endl;return 0;
}

在这里插入图片描述
除此之外,erase操作也会导致迭代器失效,erase删除pos位置数据后,pos位置之后的元素会往前挪动,没有造成底层空间的改变,理论上迭代器不会失效。但是如果pos位置刚好是最后一个数据,删完之后pos刚好是end的位置,而end位置是没有数据的,那么pos就失效了。因此在VS下,只要使用erase操作后,VS就认为该位置迭代器失效了。解决办法也是一样,重新赋值。

VS对迭代器失效的检查比较严格,程序会直接崩溃。而Linux下g++编译器对迭代器失效的检测较为宽松,程序可能可以运行,但是结果也会出错。

在这里插入图片描述

四、vector的使用实例

力扣题目:杨辉三角
杨辉三角想必大家都不陌生,如果想要生成杨慧三角的前numRows行,用vector来实现就很方便了,我们可以定义出vector<vector<int>>的结构,表示它存储的数据类型是vector<int>,模拟出杨辉三角的结构:
在这里插入图片描述

vector<vector<int>> generate(int numRows) 
{vector<vector<int>> vv;vv.resize(numRows);//将每一个元素都初始化成1for(int i = 0; i < vv.size(); i++){vv[i].resize(i+1, 1);}//遍历赋值for(int i = 2; i < numRows; i++){for(int j = 1; j < i; j++){vv[i][j] = vv[i-1][j] + vv[i-1][j-1];}}return vv;
}

结果没有问题
在这里插入图片描述

五、vector模拟实现

在我的vector.h中:

#pragma once
#include<iostream>
#include<assert.h>
using namespace std;
namespace lydly
{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;}vector(){}vector(size_t n, const T& val = T()){reserve(n);for (size_t i = 0; i < n; i++){push_back(val);}}//利用迭代器区间构造template<class InputIterator>vector(InputIterator first, InputIterator last){while (first != last){push_back(*first);first++;}}//使我们可以用{}初始化vector(initializer_list<T> il){reserve(il.size());for (auto& e : il){push_back(e);}}vector(const vector<T>& v){reserve(v.capacity());for (auto& e : v){push_back(e);}}//利用std库中的swap算法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=(vector<T> v){swap(v);return *this;}~vector(){if (_start){delete[] _start;_start = _finish = _end_of_storage = nullptr;}}size_t capacity() const{return _end_of_storage - _start;}size_t size() const{return _finish - _start;}T& operator[](size_t i){assert(i < size());return _start[i];}void resize(size_t n, T val = T()){if (n > size()){reserve(n);}while (_finish != _start + n){*_finish = val;_finish++;}}void reserve(size_t n){if (n > capacity()){size_t old_size = size();T* tmp = new T[n];if (_start){//深拷贝for (size_t i = 0; i < old_size; i++){tmp[i] = _start[i];}delete[] _start;}_start = tmp;_finish = _start + old_size;_end_of_storage = _start + n;}}void push_back(const T& x){if (_finish == _end_of_storage){size_t newcapacity = capacity() == 0 ? 4 : capacity() * 2;reserve(newcapacity);}*_finish = x;_finish++;}void pop_back(){assert(_finish > _start);_finish--;}iterator insert(iterator pos, const T& x){assert(pos >= _start && pos <= _finish);if (_finish == _end_of_storage){size_t len = pos - _start;size_t newcapacity = capacity() == 0 ? 4 : capacity * 2;reserve(newcapacity);pos = _start + pos;}//pos后的数据往后挪一个位置iterator it = _finish - 1;while (it >= pos){*(it + 1) = *it;it--;}*pos = x;_finish++;return pos;}iterator erase(iterator pos){assert(pos >= _start && pos < _finish);//pos后的数据往前挪一个位置iterator it = pos + 1;while (it < _finish){*(it - 1) = *it;it++;}_finish--;return pos;}private:iterator _start = nullptr;iterator _finish = nullptr;iterator _end_of_storage = nullptr;};
}

简单测试:
在这里插入图片描述
在这里插入图片描述

本篇完,感谢阅读。

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

相关文章:

  • 独立站seo搜索优化seo优化是指
  • 广西百色建设局网站长尾关键词排名系统
  • 广州微信营销公司seo推广优化的方法
  • 做网站上传图片seo引擎优化是做什么的
  • 宿迁网站建设流程广州中小企业seo推广运营
  • 企业网站建设采购万网官网首页
  • 广州 营销型网站建设企业网站seo排名优化
  • 二手书网站开发设计优化大师 win10下载
  • xshuan主题wordpress手机系统优化软件哪个好
  • 拼团做的比较好的网站如何做google推广
  • 网站切版教程惠州百度seo在哪
  • 常州网站建设哪家便宜最有效的免费推广方法
  • 企业做网站的好处千秋网络百度移动权重
  • 2元域名注册网站百度一下你就知道百度一下
  • 营销策划名词解释seo页面代码优化
  • 睢宁网站建设搜索引擎是什么意思啊
  • 自己做网站服务器可以吗深圳推广网络
  • 云南企业建站网页平台做个业务推广
  • 投资30元一小时赚600焦作网站seo
  • 网页设计大专工资一般多少seo专家是什么意思
  • 书店的动态网站模板微信管理工具
  • 怎么在濮阳网站做宣传电视剧排行榜百度搜索风云榜
  • 淘宝做的网站会不会过期百度学术论文查重官网
  • 设计师的网站郑州网络营销哪个好
  • 郑州专业的网站建设google网页版入口
  • 网站建设 中企动力南昌营销推广有哪些公司
  • 抚顺 网站建设怎么推广公众号让人关注
  • 向公司申请请做网站公司网站建设哪个好
  • 做外贸网站的好处宝鸡seo优化公司
  • 东莞如何制作免费的网页上海比较大的优化公司