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

做红酒网站个人网站设计模板中文

做红酒网站,个人网站设计模板中文,网站怎么做关键词怎么优化,php图片怎么导入wordpress📝前言: 在C中string常用方法总结中我们讲述了string的常见用法,vector中许多接口与string类似,作者水平有限,所以这篇文章我们主要通过读vector官方文档的方式来学习vector中一些较为常见的重要用法。 🎬个…

📝前言:
在C++中string常用方法总结中我们讲述了string的常见用法,vector中许多接口与string类似,作者水平有限,所以这篇文章我们主要通过读vector官方文档的方式来学习vector中一些较为常见的重要用法。

🎬个人简介:努力学习ing
📋个人专栏:C++学习笔记
🎀CSDN主页 愚润求学
🌄其他专栏:C语言入门基础,python入门基础,python刷题专栏


vector常见方法

  • 一,vector的定义
    • 1. vector的构造函数
    • 2. 迭代器
    • 3. 容量操作
    • 4. 增删查改操作
    • 5. 迭代器失效问题
      • 5.1. 插入元素引发的迭代器失效
      • 5.2. 删除元素导致的迭代器失效
      • 5.3. 调整容器大小引起的迭代器失效
      • 5.4. 避免迭代器失效的方法
        • 1. 插入元素时
        • 2. 删除元素时
        • 3. 调整容器大小时

一,vector的定义

vector原型:template < class T, class Alloc = allocator<T> > class vector; // generic template

也就是说vector是一个模板,T可以是任意类型,如intstring,甚至是vector<int>(此时是一个二维数组)

特点

  • 动态大小:vector可以在运行时按需调整大小,可以添加或移除元素。
  • 随机访问:能在常数时间内通过索引访问任意元素。
  • 连续存储:元素在内存中连续存储
  • 自动内存管理:vector会自动处理内存分配和释放

1. vector的构造函数

在这里插入图片描述

const allocator_type& alloc = allocator_type()是一个有关内存分配的参数,它的作用是指定 vector 所使用的内存分配器。内存分配器负责管理 vector 内部元素存储所需的内存。(在这里我们先不管它)

  1. vector()是vector的无参默认构造,会创建一个空的vector对象
  2. vector (size_type n, const value_type& val = value_type())构造并初始化nval
    这里的value_type()是调用value_type的构造函数,用匿名对象来初始化val。(对于内置类型,为了统一,内置类型也会有默认构造,不过默认构造不做任何处理,如:int a = int()这里相当于用0来初始化a
  3. vector (InputIterator first, InputIterator last)用区间迭代器初始化构造(注意是左闭右开原则)
  4. vector (const vector& x)拷贝构造(深拷贝)

2. 迭代器

vector也有和string类似的迭代器,值得注意的是endrend的位置
在这里插入图片描述

3. 容量操作

接口接口说明
size获取元素个数
capacity获取容量大小
empty判断是否为空
reserve改变capacity
resize改变size

这些接口和方法的特性和string一样就不过多赘述

4. 增删查改操作

接口接口说明
push_back尾插
pop_back尾删
find查找
insert在position插入val(原来position位置的元素后移)
erase从position位置开始删除数据
swap交换两个vector的数据空间
operator[]像数组一样访问

注意find是算法模块实现,不是vector的成员接口。这些接口和方法的特性和string一样就不过多赘述

5. 迭代器失效问题

在使用vector的迭代器时,若容器的底层空间改变(如扩容),就可能导致迭代器失效
迭代器失效就是:迭代器已经不是指向原来的数据,此时意义发生改变(可能指向别的位置,也可能是随机值)

迭代器失效后,我们就不能访问原来已经失效的的迭代器。在vs中会强制检查,访问即报错,但是在Linux中不强制检查。

5.1. 插入元素引发的迭代器失效

当在vector里插入元素时,若insert操作致使容器重新分配内存(扩容),那么所有指向该容器的迭代器都会失效。这是因为重新分配内存时,容器中的元素会被移动到新的内存位置,而原来的迭代器依旧指向旧的内存地址,原来的地址又被释放,此时就指向随机值了(类似野指针)。

#include <iostream>
#include <vector>int main() {std::vector<int> vec = {1, 2, 3};auto it = vec.begin();// 插入元素可能导致内存重新分配vec.insert(vec.begin(), 0); // 此时 it 已经失效,不能再使用// std::cout << *it << std::endl; // 错误:使用失效的迭代器return 0;
}

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

vector中删除元素时,被删除元素及其后面的所有迭代器都会失效。因为删除元素后,后面的元素会向前移动填补空缺,原有的迭代器指向的位置不再正确。

#include <iostream>
#include <vector>int main() {std::vector<int> vec = {1, 2, 3};auto it = vec.begin() + 1;// 删除元素vec.erase(vec.begin()); // 此时 it 已经失效,不能再使用// std::cout << *it << std::endl; // 错误:使用失效的迭代器return 0;
}

5.3. 调整容器大小引起的迭代器失效

调用vectorresizereserve等方法改变容器大小时,若触发了内存重新分配,所有迭代器都会失效。

#include <iostream>
#include <vector>int main() {std::vector<int> vec = {1, 2, 3};auto it = vec.begin();// 调整容器大小可能导致内存重新分配vec.resize(10); // 此时 it 已经失效,不能再使用// std::cout << *it << std::endl; // 错误:使用失效的迭代器return 0;
}

5.4. 避免迭代器失效的方法

1. 插入元素时

插入元素后,使用插入操作返回的迭代器来更新原有的迭代器。

#include <iostream>
#include <vector>int main() {std::vector<int> vec = {1, 2, 3};auto it = vec.begin();// 插入元素并更新迭代器it = vec.insert(it, 0); std::cout << *it << std::endl; // 正确:使用更新后的迭代器return 0;
}
2. 删除元素时

删除元素后,使用删除操作返回的迭代器来更新原有的迭代器。

#include <iostream>
#include <vector>int main() {std::vector<int> vec = {1, 2, 3};auto it = vec.begin() + 1;// 删除元素并更新迭代器it = vec.erase(vec.begin()); std::cout << *it << std::endl; // 正确:使用更新后的迭代器return 0;
}
3. 调整容器大小时

在调用resizereserve等方法后,若发生了内存重新分配,要重新获取迭代器。

#include <iostream>
#include <vector>int main() {std::vector<int> vec = {1, 2, 3};auto it = vec.begin();vec.resize(10);// 重新获取迭代器it = vec.begin(); std::cout << *it << std::endl; // 正确:使用更新后的迭代器return 0;
}

🌈我的分享也就到此结束啦🌈
要是我的分享也能对你的学习起到帮助,那简直是太酷啦!
若有不足,还请大家多多指正,我们一起学习交流!
📢公主,王子:点赞👍→收藏⭐→关注🔍
感谢大家的观看和支持!祝大家都能得偿所愿,天天开心!!!


文章转载自:

http://imRLKFsk.bkyLg.cn
http://dkeCImza.bkyLg.cn
http://ikN3Oerp.bkyLg.cn
http://KkBLou36.bkyLg.cn
http://nqwcTdx8.bkyLg.cn
http://de5slPCx.bkyLg.cn
http://d1DjRYIr.bkyLg.cn
http://rAYori2Y.bkyLg.cn
http://S14ZEkRE.bkyLg.cn
http://mbp4c2F4.bkyLg.cn
http://ASgOkPkG.bkyLg.cn
http://Sja5uIja.bkyLg.cn
http://3iinqckX.bkyLg.cn
http://MdADqYl1.bkyLg.cn
http://2DjDvzuz.bkyLg.cn
http://svLN9Xie.bkyLg.cn
http://IdQfBN3X.bkyLg.cn
http://OQ2CANse.bkyLg.cn
http://dZEcKVIe.bkyLg.cn
http://ulWtHgo4.bkyLg.cn
http://VFK4VdI3.bkyLg.cn
http://4jVUwF17.bkyLg.cn
http://W3eNuQMQ.bkyLg.cn
http://jZChcHxP.bkyLg.cn
http://BFzzZ8zo.bkyLg.cn
http://81z5JzlP.bkyLg.cn
http://5qrQmVbl.bkyLg.cn
http://lzM43mvL.bkyLg.cn
http://jGXxaUqm.bkyLg.cn
http://c26Syk0T.bkyLg.cn
http://www.dtcms.com/wzjs/622350.html

相关文章:

  • 网站推广宣传微信公司
  • 建立网站的三种方式濮阳创建网站公司
  • 手机网站收录搜索网页
  • 嘉兴南湖区优秀营销型网站建设免费3d动画制作软件
  • 网站转移后后台无法登陆wordpress企业内网主题
  • 网站微场景代码泰安房产网站建设
  • 南通经济开发区城乡建设局网站网站空间怎么使用
  • 网站在哪里实名认证wordpress 搬迁插件
  • php5 mysql网站开发实例精讲WordPress全球用户量2019
  • 天津重型网站建设推荐网站设计公司 知道万维科技
  • 株洲营销型网站建设代理平台登录
  • 富源县建设局的网站是什么做的比较好旅游网站
  • 外贸网站使用攻略公司网站开发费分录是
  • 服饰品牌网站建设做民宿推广都有哪些网站
  • 做门头上那个网站申报企业工商信息查询系统官网
  • 网站建设公司市场策划方案济南工程建设验收公示网
  • 免费的视频网站如何赚钱企业it外包服务公司
  • 移动端网站建设的请示朋友圈海报用什么网站做的
  • 怎样做网站标题的图标在线识别图片来源
  • 邢台做网站口碑好延安网站建设费用
  • 阿里云1m宽带做网站卡吗平台网站如何优化
  • 百度seo排名优化是什么百度seo设置
  • 建设网站建设网站建站公司常见提成比例
  • 淘宝店铺如何和别的网站做链接网站代理加盟
  • 子页网站设计沈阳最新通知今天重要消息
  • 网站开发与制作论文开题8大营销工具指的是哪些
  • 网站建设小程序企业网站建设总结
  • 手机端网站提交表单验证代码企业网站建设分析报告
  • 重庆食品商城网站设计网站开发实用技术介绍
  • 网站建设沈阳下载莱芜都市网app