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

杭州模板开发建站网站后台管理系统查询

杭州模板开发建站,网站后台管理系统查询,适合乡镇的小型加工厂,视频在线制作免费生成在学习玩string后我们开始学习vector#xff0c;本篇博客将对vector进行简单的介绍#xff0c;还会对vector一些常用的函数进行讲解 vector的介绍 实际上vector就是一个数组的数据结构#xff0c;但是vector是由C编写而成的#xff0c;他和数组也有本质上的区别#xff…在学习玩string后我们开始学习vector本篇博客将对vector进行简单的介绍还会对vector一些常用的函数进行讲解 vector的介绍 实际上vector就是一个数组的数据结构但是vector是由C编写而成的他和数组也有本质上的区别但也有相同点他的特征概括如下 vector是表示可变大小数组的序列容器。就像数组一样vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问和数组一样高效。但是又不像数组它的大小是可以动态改变的而且它的大小会被容器自动处理。本质讲vector使用动态分配数组来存储它的元素。当新元素插入时候这个数组需要被重新分配大小为了增加存储空间。其做法是分配一个新的数组然后将全部元素移到这个数组。就时间而言这是一个相对代价高的任务因为每当一个新的元素加入到容器的时候vector并不会每次都重新分配大小。vector分配空间策略vector会分配一些额外的空间以适应可能的增长因为存储空间比实际需要的存储空间更大。不同的库采用不同的策略权衡空间的使用和重新分配。但是无论如何重新分配都应该是对数增长的间隔大小以至于在末尾插入一个元素的时候是在常数时间的复杂度完成的。因此vector占用了更多的存储空间为了获得管理存储空间的能力并且以一种有效的方式动态增长。与其它动态序列容器相比deque, list and forward_list vector在访问元素的时候更加高效在末尾添加和删除元素相对高效。对于其它不在末尾的删除和插入操作效率更低。比起list和forward_list统一的迭代器和引用更好。 对于C语言中的数组二者有很多的异同点我将其概括如下 相同点 1 二者都是采用连续的空间来存储元素 2 二者都能通过下标进行访问 不同点 1 vector是采用动态开辟容器大小可以动态改变并且是自动处理 2vector会分配一些额外的空间以适应可能的增长因为存储空间比实际需要的存储空间更大 vector的使用 vector的定义 vector的定义就差不多是初始化以及拷贝构造和构造这些在之前的string类函数讲解中也提到了其实都大差不差的 构造并初始化 第一个参数是你要初始化元素的个数第二个参数是你要初始化成的字符 这里需要注意**里面就是你要放入vector里元素的类型** vectorint v(10, 1); for (auto ch : v) {cout ch; } cout endl;拷贝构造 其实都大差不差学习了前面的string和类和对象后都很简单了 vectorint v(10, 1);vectorint v1(v);for (auto ch : v1){cout ch;}cout endl;vector iterator 的使用 迭代器很常用咱们做个简单的讲解 迭代器同样地分为正向和反向 我们可以通过一个简单的代码来了解迭代器的使用 vectorint v; for (int i 1; i 5; i) {v.push_back(i); } for (vectorint::iterator it v.begin(); it ! v.end(); it) {cout *it; } cout endl;下面为反向迭代器 反向迭代器记得加上reverse vectorint v; for (int i 1; i 5; i) {v.push_back(i); } for (vectorint::reverse_iterator it v.rbegin(); it ! v.rend(); it) {cout *it; } cout endl;关于begin和rbeginend和rend的位置的关系如下图所示我们要记得两种迭代器都是从begin开始遍历 通过这张图我们需要注意到一个很重要的点 迭代器的区间都是左闭右开的所以end是在最后一个元素的后一个位置 vector 空间增长问题 其实空间增长问题我在之前的string类就有提到过都是有规律可循的 1 capacity的代码在vs和g下分别运行会发现vs下capacity是按1.5倍增长的g是按2倍增长的。vector增容都是2倍具体增长多少是根据具体的需求定义 2 reserve只负责开辟空间如果确定知道需要用多少空间reserve可以缓解vector增容的代价缺陷问题。 3 resize在开空间的同时还会进行初始化影响size 可以看到resize默认就是初始化为0 同时改变了capacity和size 而reserve只改变了capacity并且不会有初始化的功能 vectorint v; v.reserve(10); for (vectorint::iterator it v.begin(); it ! v.end(); it) {cout *it; } cout endl; cout former: endl; cout v.size() endl; cout v.capacity() endl; v.reserve(20); cout endl; cout after: endl; cout v.size() endl; cout v.capacity() endl;vector 增删查改 pushback尾插和popback尾删 都很简单拿一段简单的代码来演示一下吧 vectorint v; v.resize(10,1); for (vectorint::iterator it v.begin(); it ! v.end(); it) {cout *it; } cout endl; v.push_back(2); for (vectorint::iterator it v.begin(); it ! v.end(); it) {cout *it; } cout endl; v.pop_back(); for (vectorint::iterator it v.begin(); it ! v.end(); it) {cout *it; } cout endl;insert插入函数 这里如果需要在其他地方插入就在begin上进行操作 vectorint v; v.resize(10,1); for (vectorint::iterator it v.begin(); it ! v.end(); it) {cout *it; } cout endl; vectorint::iterator it v.begin(); v.insert(it, 3); for (vectorint::iterator it v.begin(); it ! v.end(); it) {cout *it; } cout endl;erase函数 erase函数可以根据下标索引来删除元素但是再insert后要重新给下标赋值insert前的下标i已经失效了其实这就是所说的迭代器失效问题 在这里我们插入了元素后会发生扩容原空间可能已经被释放了或者说如果erase删除了最后一个位置的元素vector里已经没有元素可以删除也会导致迭代器失效但是erase后我们又使用it打印这里的it可能使用的就是原空间程序就会发生崩溃所以我们需要在执行完insert后再次对it进行赋值不然就会发生这种情况但是一些编译器对于迭代器失效没有过于严格的检查所以程序不会崩溃但是程序输出的结果不对 erase函数返回的是在vector对象中删除元素的后一个元素的指针 通常解决迭代器失效最简单的方法就是 对迭代器重新赋值 vectorint v; v.resize(10,1); for (vectorint::iterator it v.begin(); it ! v.end(); it) {cout *it; } cout endl; vectorint::iterator i v.begin(); v.insert(i3, 3); for (vectorint::iterator it v.begin(); it ! v.end(); it) {cout *it; } cout endl; i v.begin(); v.erase(i3); for (vectorint::iterator it v.begin(); it ! v.end(); it) {cout *it; } cout endl;swap函数 我们通过一段简单的代码来了解一下 我们交换前打印两个vector对象中的元素交换后再打印一次 vectorint v1; v1.resize(10,1); cout 交换前 endl; cout v1:; for (vectorint::iterator it v1.begin(); it ! v1.end(); it) {cout *it; } cout endl; vectorint v2; v2.resize(10, 2); cout v2:; for (vectorint::iterator it v2.begin(); it ! v2.end(); it) {cout *it; } cout endl; v1.swap(v2); cout 交换后 endl; cout v1:; for (vectorint::iterator it v1.begin(); it ! v1.end(); it) {cout *it; } cout endl; cout v2:; for (vectorint::iterator it v2.begin(); it ! v2.end(); it) {cout *it; } cout endl;好了今天的分享到这里就结束了谢谢大家的支持
http://www.hkea.cn/news/14277640/

相关文章:

  • 网上哪个网站教做西点销售管理系统设计
  • 美声广告网站建设建设局官网查询
  • 网站建设费属于宣传费泰州企业网站模板建站
  • 男男互做网站泰国邢台企业网站建设报价
  • 学畅留学招聘网站开发主管网店设计美工培训
  • 网站服务器大小广州市门户网站建设品牌
  • 做网站应该用什么镜像在sae上搭建wordpress
  • 母婴网站建设的与功能模块什么是网页设计培训
  • 昆明房产网站建设网站排名做不上去吗
  • 西安市建设监理协会网站网站地址地图怎么做
  • 四川住房和城乡建设厅网站三类人员网站开发职责
  • 贵阳市网站建设营销方案模板范文
  • 网站建设模板哪里下载营销软文案例
  • 南通网站建设外包wordpress root权限
  • 学做面包到什么网站植物设计网站推荐
  • 网站更改wordpress更新删除
  • 大型网站建设动力无限山东省建设厅举报网站
  • swoole做网站公众号做微网站吗
  • 建筑网站图片godaddy wordpress迁移
  • PPT做音乐网站介绍网站开发都用什么数据库
  • 甘肃做网站多少钱wordpress图片备用地址
  • 网页制作企业网站作业网上设计接单的网站
  • 建设网站联盟c2c网站有哪些
  • 芜湖网站建设优化库尔勒谁在做电商网站建设
  • 河南网站建设推广公司荣成网站建设
  • 易网官方网站南通门户网站建设
  • 南京市建设工程网站南宁定制网站建设
  • 平阳县住房和城乡规划建设局网站如何用网站做淘宝客
  • 洞泾做网站公司网站pv是什么
  • 360免费建站 服务期班级网页模板