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

北京做的比较好的网站公司吗百度热搜关键词排行榜

北京做的比较好的网站公司吗,百度热搜关键词排行榜,南京微信网站开发,如何建设自己网站首页文本旨在对 C 的容器 vector 进行肤浅的分析。 文章目录 Ⅰ、vector 的指定元素删除代码结果与分析 Ⅱ、vector 在新增元素后再删除指定元素代码结果与分析 Ⅲ、vector 在特定条件下新增元素代码结果与分析 参考文献 Ⅰ、vector 的指定元素删除 代码 #include <iostream&g…

文本旨在对 C++ 的容器 vector 进行肤浅的分析。

文章目录

    • Ⅰ、vector 的指定元素删除
      • 代码
      • 结果与分析
    • Ⅱ、vector 在新增元素后再删除指定元素
      • 代码
      • 结果与分析
    • Ⅲ、vector 在特定条件下新增元素
      • 代码
      • 结果与分析
    • 参考文献

Ⅰ、vector 的指定元素删除

代码

#include <iostream>
#include <vector>using namespace std;int main() {std::vector<int> v = {8, 5, 6, 2, 4, 7};for (auto i = v.begin(); i != v.end();) {cout << i.base() << "  " << v.begin().base() << endl;if (*i == 2) {i = v.erase(i);} else {i++;}}cout << "size : " << v.size() << endl;for (auto j = v.begin(); j != v.end(); j++) {cout << (*j) << endl;}
}

结果与分析

先说明一下 vector.erase() 就是动态数组的指定位置的删除,其返回值为指向下一个元素( 或 end() ) 的迭代器。 而关于迭代器需要知道的点为

  1. 迭代器不是指针,是类模板,表现的 像 指针。他只是 模拟了指针的一些功能,通过 重载了指针的一些操作符,->,*,++ --等封装了指针,是一个“可遍历STL( Standard Template Library)容器内全部或部分元素”的对象, 本质是封装了原生指针,是指针概念的一种提升(lift),提供了比指针更高级的行为,相当于一种智能指针,他可以根据不同类型的数据结构来实现不同的++,–等操作;
  2. 迭代器返回的是 对象引用而不是对象的值,所以cout只能输出迭代器使用 *取值后的值而不能直接输出其自身。
  3. 在设计模式中有一种模式叫 迭代器模式,简单来说就是提供一种方法,在不需要暴露某个容器的内部表现形式情况下,使之能依次访问该容器中的各个元素,这种设计思维在STL中得到了广泛的应用,是STL的关键所在,通过 迭代器,容器和算法可以有机的粘合在一起,只要对算法给予不同的迭代器,就可以对不同容器进行相同的操作。

这也就是下面 vector v 的首地址为72b0,每次进行 i++ ,其基地址就加了 4 ,一个 int 的字节量。而在删除了 元素 2 之后,迭代器的值仍然为 72bc,但是在删除之后这个值志向了元素 4。完美的解释了代码。那么问题的出现请看第二节。
在这里插入图片描述

Ⅱ、vector 在新增元素后再删除指定元素

代码

#include <iostream>
#include <vector>using namespace std;int main() {std::vector<int> v = {8, 5, 6, 2, 4, 7};for (auto i = v.begin(); i != v.end();) {// cout << i.base() << "  " << v.begin().base() << endl;if (*i == 8) {v.push_back(88);i = v.erase(i);} else {i++;}}cout << "size : " << v.size() << endl;for (auto j = v.begin(); j != v.end(); j++) {cout << (*j) << endl;}

结果与分析

在这里插入图片描述此时在添加了一个新的元素后,再进行删除操作会发生段错误。而且为什么会有两个88。这就是我遇见的问题所在。虽然用 int + vector 和 打印地址的方式可以很快地发现问题。但我面对的是 vector<expr *>呀,。。。这么来看,我好想确实有苦说不出阿。没办法,🥬是这样的,唉。
而且一般来说,也没人会打印迭代器的基地址。虽然打印了问题就能一目了然了,但我是煞笔 此时为什么会有两个88,而且元素 5 去哪了。这就是问题的所在了。但是答案其实就在 vector 的定义和名称中,动态数组 。最后答案的揭晓在第三节。 在这里插入图片描述

Ⅲ、vector 在特定条件下新增元素

代码

#include <iostream>
#include <vector>using namespace std;int main() {std::vector<int> v = {8, 5, 6, 2, 4, 7};for (auto i = v.begin(); i != v.end();) {cout << i.base() << "  " << v.begin().base() << endl;if (*i == 8) {v.push_back(88); i++;} else {i++;}}cout << "size : " << v.size() << endl;for (auto j = v.begin(); j != v.end(); j++) {cout << (*j) << endl;}

结果与分析

在这里插入图片描述

最开始 v 的首地址为b2b0,但是在添加了一个元素之后其首地址发送了改变,aka 内存发现了一片新的区域来更合适的存储这个数组,从而动态地发生了改变。但是此时我们设定的迭代器并未改变。可以看出在进行了 275 次自加操作后,迭代器才完成了对于新数组的访问。
在这里插入图片描述
结尾处 的来两个88也很好解释了,在最开始的 元素8 处,向数组中添加了一个 88。从而导致了数组 v的内存地址发生了改变。在经历了漫长的自加操作后,迭代器 i 又找到了一个元素 8,就又添加了一个新的元素 88。
至此问题结束,数组动态地删除指定元素的模板就是第一节的代码,不要在删除的过程中添加新的元素,反之亦然!!!。希望可以帮到你,wish u all the best.

参考文献

  1. iterator迭代器和指针的区别
  2. stl_vector.h
http://www.hkea.cn/news/774619/

相关文章:

  • 自学软件网站开发网络推广怎样做
  • 最新版的wordpress怎么添加特征图优化关键词的作用
  • 深圳做网站google推广网络营销和传统营销的区别和联系
  • 专业做网站的顺德公司网络推广怎么收费
  • php商城网站建设多少钱天津百度seo排名优化
  • 注册网站免费注册insseo关键词优化推广哪家好
  • 深圳房地产网站开发常见的网络营销工具有哪些
  • .net 网站管理系统湖南企业竞价优化首选
  • 南山区住房与建设局官方网站网络赚钱推广
  • wordpress mycred汉化seo引擎搜索入口
  • 在线教育网站用什么做百度搜索的优势
  • 甘肃省住房城乡建设厅网站首页智能建站模板
  • 智能科技网站模板下载地址百度学术论文查重
  • 网站要怎么做才能让360收录推广品牌的策划方案
  • 做网站前景营销课程培训视频
  • 青海做网站广告开户南京seo
  • wordpress写软文赚钱seo快速培训
  • 南宁网站建设接单陕西省人民政府
  • wordpress网站价格seo域名综合查询
  • 支付网站怎么做的网络自动推广软件
  • js做网站统计品牌关键词优化
  • 微信公众号管理平台官网谷歌seo建站
  • 鲜花购物网站源码企业网站营销的优缺点
  • 表白网站制作在线日照网站优化公司
  • 企业网站建设策划书 前言徐州关键词优化排名
  • 一级a做爰片视频网站全国新闻媒体发稿平台
  • 唐山网站建设哪家专业高德北斗导航
  • wordpress 地址 .html企业网站seo贵不贵
  • 提供网站制作公司哪家好网络软文范文
  • 做原型网站枣庄网络推广seo