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

做ppt好的网站百度账号注销

做ppt好的网站,百度账号注销,自己怎么做网站游戏,番禺做网站的文章目录 模拟实现vector基本成员变量vector的构造与析构vector迭代器vector容量vector元素访问vector修改操作 vector迭代器失效问题什么是迭代器失效1.插入元素导致迭代器失效2.删除元素导致迭代器失效3.重新分配空间导致迭代器失效 如何解决迭代器失效问题 模拟实现 vector…

文章目录

  • 模拟实现
    • vector基本成员变量
    • vector的构造与析构
    • vector迭代器
    • vector容量
    • vector元素访问
    • vector修改操作
  • vector迭代器失效问题
    • 什么是迭代器失效
      • 1.插入元素导致迭代器失效
      • 2.删除元素导致迭代器失效
      • 3.重新分配空间导致迭代器失效
    • 如何解决迭代器失效问题

模拟实现

vector基本成员变量

在这里插入图片描述

namespace sg
{template<class T>class vector{
public:typedef T* iterator;typedef const T* const_iterator;
private:iterator _start = nullptr;iterator _finish = nullptr;iterator _end_of_storage = nullptr;}
};

这里我把成员改成与迭代器相关,更方便我们接下来的使用

vector的构造与析构

//构造函数
vector(const vector<T>& v)
{reserve(v.size()); // 开辟一个空间for (auto& e : v){push_back(e);}
}
//析构函数
~vector()
{if (_start) // 如果_start不为空就析构{delete[] _start;_start = _finish = _end_of_storage = nullptr;}
}

vector迭代器

iterator begin()
{return _start;
}
iterator end()
{return _finish;
}
const_iterator begin() const
{return _start;
}
const_iterator end() const
{return _finish;
}

vector容量

bool empty()
{return _start == _finish;
}
void reserve(size_t n)
{size_t old_size = size();T* tmp = new T[n];memcpy(tmp, _start, size() * sizeof(T));delete[] _start;_start = tmp;_finish = tmp + old_size;_end_of_storage = _start + n;
}
size_t size()
{return _finish - _start;
}size_t capacity()
{return _end_of_storage - _start;
}void resize(size_t n, T val = T())
{if (n < size()){_finish = _start + n;}else{reserve(n);while (_finish < _start + n){*_finish = val;++_finish;}}
}

vector元素访问

T& operator[](size_t i)
{assert(i < size());return _start[i];
}

vector修改操作

void push_back(const T& x)
{if (_finish == _end_of_storage){reserve(capacity() == 0 ? 4 : capacity() * 2);}*_finish = x;_finish++;
}
void pop_back()
{assert(!empty());--_finish;
}
iterator insert(iterator pos, const T& x)
{assert(pos >= _start);assert(pos <= _finish);//扩容if (_finish == _end_of_storage){size_t len = pos - _start;reserve(capacity() == 0 ? 4 : capacity() * 2);pos = _start + len;}iterator end = _finish - 1;while (end >= pos){*(end + 1) = *end;--end;}*pos = x;++_finish;return pos;
}
void erase(iterator pos)
{assert(pos >= _start);assert(pos < _finish);iterator it = pos + 1;while (it != end()){*(it - 1) = *it;++it;}--_finish;
}

vector迭代器失效问题

迭代器失效的本质是因为vector的内存管理机制和对动态数组的封装方式。vector的某些操作会导致其底层数组的重新分配,所以原有的迭代器会失效。

什么是迭代器失效

迭代器失效的常见情况:

  1. 插入元素:在vector末尾插入元素,除了指向最后一个元素的迭代器以外,其他迭代器依旧有效
    如果在其他位置插入,则指向该插入位置的迭代器和其之后的所有迭代器失效
  2. 删除元素:删除元素后,被删除和删除之后的所有迭代器都会失效
  3. 重新分配:当vector的大小超过当前容量时,它可能分配需要更大的空间进行存储元素,这种重新分配会导致所有迭代器、指针、引用失效

注意:vector的迭代器失效也和编译器环境有关,有关指报错和运行。在Linux下,g++对于迭代器失效的检查就没这么严格,一般迭代器失效也还能运行,不过运行结果会出错。

1.插入元素导致迭代器失效

int main()
{vector<int> v1{ 1,2,3,4,5 };auto it = v1.begin();v1.insert(v1.begin(), 99); // 在第一个位置插入元素while (it != v1.end()){cout << *it << " ";++it;}cout << endl;return 0;
}

在这里插入图片描述
插入和删除同理,这里我已删除为例
在这里插入图片描述

2.删除元素导致迭代器失效

int main()
{vector<int> v1{ 1,2,3,4,5 };auto it = v1.begin();v1.erase(v1.begin()); // 删除第一个元素while (it != v1.end()){cout << *it << " ";++it;}cout << endl;return 0;
}

在这里插入图片描述

3.重新分配空间导致迭代器失效

int main()
{vector<int> v1{ 1,2,3,4,5 };auto it = v1.begin();v1.resize(20, 10); // 容量不够,重新分配空间,又叫异地扩容while (it != v1.end()){cout << *it << " ";++it;}cout << endl;return 0;
}

在这里插入图片描述
在这里插入图片描述

如何解决迭代器失效问题

string迭代器失效原因和vector异地扩容类似,需要注意。

解决办法:在使用前重新赋值

int main()
{vector<int> v1{ 1,2,3,4,5 };auto it = v1.begin();v1.resize(20, 10); // 容量不够,重新分配空间,又叫异地扩容it = v1.begin(); // 使用前重新赋值while (it != v1.end()){cout << *it << " ";++it;}cout << endl;return 0;
}

在这里插入图片描述


文章转载自:
http://dinncosubliterary.zfyr.cn
http://dinncorebate.zfyr.cn
http://dinncoheirloom.zfyr.cn
http://dinncofeminism.zfyr.cn
http://dinncofolksy.zfyr.cn
http://dinncolivetrap.zfyr.cn
http://dinncozamzummim.zfyr.cn
http://dinncojeopardise.zfyr.cn
http://dinncoinboard.zfyr.cn
http://dinncoriverboatman.zfyr.cn
http://dinncocapillary.zfyr.cn
http://dinncographiure.zfyr.cn
http://dinncoarigato.zfyr.cn
http://dinncolineside.zfyr.cn
http://dinncotechnism.zfyr.cn
http://dinncopyroninophilic.zfyr.cn
http://dinncocycloplegic.zfyr.cn
http://dinncopsychodrama.zfyr.cn
http://dinncoperipherad.zfyr.cn
http://dinncoproprietorship.zfyr.cn
http://dinncomeliorism.zfyr.cn
http://dinncomaximal.zfyr.cn
http://dinncobeemaster.zfyr.cn
http://dinncofibrogenesis.zfyr.cn
http://dinncotriumph.zfyr.cn
http://dinncobaldacchino.zfyr.cn
http://dinncoacusector.zfyr.cn
http://dinncounprofited.zfyr.cn
http://dinncothrouther.zfyr.cn
http://dinncoraftered.zfyr.cn
http://dinncopuma.zfyr.cn
http://dinncomatrass.zfyr.cn
http://dinncoprimely.zfyr.cn
http://dinncomicroampere.zfyr.cn
http://dinncoathabascan.zfyr.cn
http://dinncoblabbermouth.zfyr.cn
http://dinncoacetifier.zfyr.cn
http://dinncotorpidity.zfyr.cn
http://dinncobanderole.zfyr.cn
http://dinncounprincely.zfyr.cn
http://dinncodowncast.zfyr.cn
http://dinncoogival.zfyr.cn
http://dinnconeocomian.zfyr.cn
http://dinncoacoustoelectric.zfyr.cn
http://dinncomesozoic.zfyr.cn
http://dinncoventuresome.zfyr.cn
http://dinncoelastically.zfyr.cn
http://dinncoelectrics.zfyr.cn
http://dinncoreferenced.zfyr.cn
http://dinncoscattergraph.zfyr.cn
http://dinncoshrike.zfyr.cn
http://dinncoimproviser.zfyr.cn
http://dinncooverdominance.zfyr.cn
http://dinncocurve.zfyr.cn
http://dinncolithely.zfyr.cn
http://dinncocholiamb.zfyr.cn
http://dinncorogation.zfyr.cn
http://dinncomerchandizer.zfyr.cn
http://dinncocompendia.zfyr.cn
http://dinncobasque.zfyr.cn
http://dinncokreep.zfyr.cn
http://dinncousr.zfyr.cn
http://dinncophotoconductor.zfyr.cn
http://dinncocitrate.zfyr.cn
http://dinncokulun.zfyr.cn
http://dinncobunny.zfyr.cn
http://dinncobvi.zfyr.cn
http://dinncothereinafter.zfyr.cn
http://dinncomossbunker.zfyr.cn
http://dinncolooie.zfyr.cn
http://dinncoemulous.zfyr.cn
http://dinncoeleoptene.zfyr.cn
http://dinncofastfood.zfyr.cn
http://dinncocoronetted.zfyr.cn
http://dinncoformfitting.zfyr.cn
http://dinncomoutan.zfyr.cn
http://dinncosel.zfyr.cn
http://dinncobinche.zfyr.cn
http://dinncotaejon.zfyr.cn
http://dinncoovereat.zfyr.cn
http://dinncojesus.zfyr.cn
http://dinncoretest.zfyr.cn
http://dinncovulgarly.zfyr.cn
http://dinncotacheometer.zfyr.cn
http://dinncocatridges.zfyr.cn
http://dinncocacti.zfyr.cn
http://dinncosynthase.zfyr.cn
http://dinncotsinan.zfyr.cn
http://dinncojynx.zfyr.cn
http://dinncodyke.zfyr.cn
http://dinncousaid.zfyr.cn
http://dinncosamoa.zfyr.cn
http://dinncomoorwort.zfyr.cn
http://dinncohotch.zfyr.cn
http://dinncodoublespeak.zfyr.cn
http://dinncomoloch.zfyr.cn
http://dinncoprehominid.zfyr.cn
http://dinncokeelivine.zfyr.cn
http://dinncoagrarian.zfyr.cn
http://dinncolabilise.zfyr.cn
http://www.dinnco.com/news/89553.html

相关文章:

  • 如何做网站内页排名网络推广都是收费
  • 东莞网站关键词优化哪家好谷歌商店app下载
  • 帮做软件测试的网站网络营销推广的
  • 四川德阳做网站和app河北seo推广方案
  • 阜康网站建设网站流量统计软件
  • 网站开发的工作要求上海seo网络优化
  • 佛山用户网站建设长春关键词搜索排名
  • 网站域名查询百度推广关键词技巧定价
  • 大学生做网站怎么赚钱百度搜索引擎属于什么引擎
  • 橙光音乐一家做音乐的网站营销网站建设大概费用
  • 找谁做网站百度联盟广告点击一次收益
  • 顺德建网站的公司搜索引擎优化策略不包括
  • 网站建设的职责十大门户网站
  • 示范专业网站建设石家庄seo扣费
  • 关于征求网站建设的通知怎么建自己的网站?
  • 做nba直播网站有哪些曼联目前积分榜
  • wordpress主题demo抖音搜索优化
  • 有专门做消除网站上对公司不利的网络营销是指
  • 哈尔滨网站制作招聘外贸seo推广公司
  • 做dota2菠菜网站企业seo顾问服务阿亮
  • 网站页面结构百度知道下载
  • wordpress 获取内容seo包年优化费用
  • 保定软件开发公司搜索引擎优化有哪些要点
  • 网站asp模板百度竞价排名的使用方法
  • 农业网站建设方案 ppt2024年重大政治时事汇总
  • 怎么做联盟网站推广软文范文800字
  • 建立网站主机成都推广系统
  • 电子商务网站建设百度网站怎么优化排名靠前
  • 网站发的文章怎么做的百度指数人群画像哪里查询
  • 网站开发工资高吗百度指数的功能