03.28_111期_C++_vector特性和使用

        如果写出vector这个类的时候不用缺省值,也不用初始化列表
        那么可以编写如下构造函数,利用半缺省参数给没有初始化的vector实例进行赋空
        但如果存在下面这两句话的设计
        template <class InputIterator>
        vector(InputIterator first, InputIterator last)
        则在调用的时候,写下后面的代码:vector<int> v1(10, 1);  
        将不会调用vector(size_t n, const T& val = T())
        因为还要对10进行类型转换,
         编译器去找的时候会去找vector(InputIterator first, InputIterator last)
        作为更匹配的构造函数,因为其类型更匹配
        所以实际上C++标准库中将这种构造函数设计成
        vector(size_t n, const T& val = T());
        vector(int n, const T& val = T());  这两个版本 

        想要支持 将字符数组 / 整型数组直接作为vector 的构造函数的实参
        必须在initializer_list<T> 已经设计完毕的基础上
        initializer_list<T>是一个类,
                其成员变量中有两个迭代器,是数组的首尾指针
                其成员函数中有size,反映数组中的元素个数
         注意:
             1. vector<int> v1 = { 1, 2, 3, 4, 5, 6, 7, 8 };这句话合法
                合法的原因:
                   在创建临时变量实例时,vector<int> tmp({ 1, 2, 3, 4, 5, 6, 7, 8 });合法
             2. vector<int> v1 = { 1, 2, 3, 4, 5, 6, 7, 8 };
                看起来就像发生了隐式类型转换

        类中的成员函数可以是一个模板函数
        那么构造函数可以用一下的形式进行编写,通过两个迭代器实现

                注意:下面的memcpy不能保证深拷贝
                    因为如果 此时vector中存放的都是string类型的变量
                    那么memcpy只会把_start中每个string的实例中的成员变量
                        依次赋值给tmp,由于string的成员变量是:_arr; _size; _capacity
                        所以此时只会让tmp中的每个string实例中的成员和_start中的地址相同
                    那么对tmp 和_start进行析构时,将会对同一块空间析构两次
                  所以应该使用自定义类型本身的赋值重载,实现地址的深拷贝

        如果用模板 + 迭代器的形式实现构造函数,
        那么迭代器可以将字符型指针作为迭代器,传入到一个以int类型为内容的vector容器中

        实际上C++库中把 { 1, 2, 3, 4, 5, 6, 7, 8 }这种变量
         直接封装成了一个类,该类的类型为initializer_list<int>
         即下面的代码中x 是initializer_list<int> 类型的变量
         std::vector<int> v1 = { 1, 2, 3, 4, 5, 6, 7, 8 };这句话能执行,
         本质上是因为库中写了一个vector(initializer_list<T> arr);的构造函数
         
         下面说明std::vector<int> v1 = { 1, 2, 3, 4, 5, 6, 7, 8 };这句话的执行过程
         
         先利用{ 1, 2, 3, 4, 5, 6, 7, 8 }这个initializer_list<int> 类型的变量
         执行vector<int> tmp({ 1, 2, 3, 4, 5, 6, 7, 8 });
         调用vector中单参数的构造函数
         产生一个vector<int>类型的临时变量
         再将调用 vector中的拷贝构造,拷贝构造传入的形参就是这个临时变量
         这也说明了在设计 拷贝构造 和 push_back 这样的成员函数时
         需要对形参的类型加一个const限定 

         删除偶数
        下面的程序加else是必须的,这是因为迭代器不同域数组下标
        执行erase方法之后会立马将后面的所有元素往前移动
        那么此时如果要实现删除偶数只能通过++it;
        对于VS平台下,其C++库中要求:只要使用了erase方法
        要想继续使用iterator,只能通过erase方法的返回值更新迭代器,
         此时VS下的erase方法将会返回当前删除的元素对应的迭代器
         注意:此时的迭代器不是指针,不是指针这一点是和linux平台下是不同的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/795400.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端学习<四>JavaScript基础——07-基本数据类型:Number

数值型&#xff1a;Number 在 JS 中所有的数值都是 Number 类型&#xff0c;包括整数和浮点数&#xff08;小数&#xff09;。 var a 100; // 定义一个变量 a&#xff0c;并且赋值整数100console.log(typeof a); // 输出变量 a 的类型​var b 12.3; // 定义一个变量 b&#…

大语言模型LLM《提示词工程指南》学习笔记02

文章目录 大语言模型LLM《提示词工程指南》学习笔记02设计提示时需要记住的一些技巧零样本提示少样本提示链式思考&#xff08;CoT&#xff09;提示自我一致性生成知识提示 大语言模型LLM《提示词工程指南》学习笔记02 设计提示时需要记住的一些技巧 指令 您可以使用命令来指…

【ubuntu】Vim配置记录

一、Vim介绍 vim是一个高度可定制的文本编辑器&#xff0c;有许多丰富的功能&#xff0c;扩展性极强&#xff0c;用户可以通过多种方式来增强vim vim有非常多的优点&#xff0c;例如高效率的移动&#xff0c;可以不用鼠标&#xff0c;完全用键盘操作&#xff0c;占用系统资源较…

159 Linux C++ 通讯架构实战14,epoll 函数代码实战

ngx_epoll_init函数的调用 //&#xff08;3.2&#xff09;ngx_epoll_init函数的调用&#xff08;要在子进程中执行&#xff09; //四章&#xff0c;四节 project1.cpp&#xff1a;nginx中创建worker子进程&#xff1b; //nginx中创建worker子进程 //官方nginx ,一个…

深入解析Python的lxml库:高效处理XML和HTML的利器

更多Python学习内容&#xff1a;ipengtao.com Python中的lxml库是一个强大的XML和HTML处理库&#xff0c;它基于libxml2和libxslt库&#xff0c;提供了高效的XML解析和处理功能。本文将详细介绍lxml库的安装、特性、基本功能、高级功能、实际应用场景和总结&#xff0c;帮助读者…

phpstorm设置头部注释和自定义注释内容

先说设置位置&#xff1a; PhpStorm中文件、类、函数等注释的设置在&#xff1a;setting-》Editor-》FIle and Code Template-》Includes-》PHP Function Doc Comment下设置即可&#xff0c;其中方法的默认是这样的&#xff1a; /** ${PARAM_DOC} #if (${TYPE_HINT} ! "…

Unity与CocosCraetor对比学习三

一、计时器 1.在Creator中 void start() {// js中的计时器// 延迟1秒后执行一次&#xff0c;不受Cocos限制setTimeout(() > {console.log("haha");}, 1000);// 每隔1秒执行一次setInterval(() > {console.log("haha");}, 1000);// creator中的计时…

计算机网络的分层结构及模型

1.计算机网络分层的基本原则 &#xff08;1&#xff09;各层之间相互独立&#xff0c;每层只实现一种相对独立的功能 &#xff08;2&#xff09;每层之间的交互尽可能少 &#xff08;3&#xff09;结构上可分割开&#xff0c;每层都采用最合适的技术来实现 &#xff08;4&…

Linux第4课 Linux的基本操作

文章目录 Linux第4课 Linux的基本操作一、图形界面介绍二、终端界面介绍 Linux第4课 Linux的基本操作 一、图形界面介绍 本节以Ubuntu系统的GUI为例进行说明&#xff0c;Linux其他版本可自行网搜。 图形系统进入后&#xff0c;左侧黄框内为菜单栏&#xff0c;右侧为桌面&…

在订单流程中锁定库存的最佳时机

目录 1. 用户点击结算时锁定库存 2. 用户提交订单时锁定库存 3. 用户支付成功后锁定库存 最佳时机选择 1. 用户点击结算时锁定库存 优点&#xff1a;确保用户在决定购买时商品是可用的&#xff0c;增加了用户的购买信心。缺点&#xff1a;如果用户在结算后放弃购买&#x…

嵌入式开发中内存管理与优化

内存管理与优化 在嵌入式开发中&#xff0c;内存管理是一项至关重要的任务&#xff0c;直接影响到系统的稳定性和性能。由于嵌入式设备通常资源有限&#xff0c;尤其是内存资源&#xff0c;因此内存管理与优化显得尤为重要。 具体实现 1. 静态内存分配 静态内存分配是指在编…

[HackMyVM]靶场Birthday

难度:Hard kali:192.168.56.104 靶机:192.168.56.149 端口扫描 ┌──(root㉿kali2)-[~/Desktop] └─# nmap 192.168.56.149 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-04-06 10:39 CST Nmap scan report for 192.168.56.149 Host is up (0.00016s latency). N…

硬件-1、体系架构

cpu 处理器 arm处理器的七种工作模式 arm寄存器 两张图是一样的&#xff0c;r0---r12是通用寄存器。其他寄存器可参考图一&#xff0c;cpu架构。 程序状态寄存器psr&#xff08;cpsr/spsr&#xff09; 程序异常处理 理解示例 当使用swi&#xff08;软中断指令&#xff09;指令…

【VMware Workstation】启动虚拟机报错“此主机支持 AMD-V,但 AMD-V 处于禁用状态”

问题出现步骤&#xff1a; 打开虚拟机&#xff1a; 然后报错&#xff1a; “此主机支持 AMD-V&#xff0c;但 AMD-V 处于禁用状态。 如果已在 BIOS/固件设置中禁用 AMD-V&#xff0c;或主机自更改此设置后从未重新启动&#xff0c;则 AMD-V 可能被禁用。 (1) 确认 BIOS/固件设…

机器学习KNN最邻近分类算法

文章目录 1、KNN算法简介2、KNN算法实现2.1、调用scikit-learn库中KNN算法 3、使用scikit-learn库生成数据集3.1、自定义函数划分数据集3.2、使用scikit-learn库划分数据集 4、使用scikit-learn库对鸢尾花数据集进行分类5、什么是超参数5.1、实现寻找超参数5.2、使用scikit-lea…

数据分析 -- numpy

文章目录 numpy库简介简介特点 numpy操作数组创建数组属性数组变更数据计算 numpy库简介 简介 开源的Python库&#xff0c;它提供了高性能的多维数值&#xff08;numpy.ndarray&#xff09;计算能力&#xff1b;由“Numerical Python”缩写而来&#xff0c;并且它是Pandas库的…

Zabbix6 - Centos7部署Grafana可视化图形监控系统配置手册手册

Zabbix6 - Centos7部署Grafana可视化图形监控系统配置手册手册 概述&#xff1a; Grafana是一个开源的数据可视化和监控平台。其特点&#xff1a; 1&#xff09;丰富的可视化显示插件&#xff0c;包括热图、折线图、饼图&#xff0c;表格等&#xff1b; 2&#xff09;支持多数据…

L2-2 口罩发放 (25 分)

坑点&#xff1a; 应该就是题目要求的身份证号唯一 然后是相同的人同一天多次申请 然后是时间相同按照申请记录排序 需要注意的是&#xff0c;不要在同一天内看到满足要求的就直接发放口罩&#xff0c;有可能发完之后发现后面的人的时间更早 #include "bits/stdc.h" …

Web Form

https://github.com/bonfy/go-mega/blob/master/04-web-form.md 从这网站学的 随着我们项目的扩大&#xff0c;代码量会愈来愈多&#xff0c;我们需要建立这样的数据结构来使整个项目看起来没有那么臃肿 package model - 负责数据建模 vm - View Model&#xff0c;定义各种…

【MySQL】增删改查操作(基础)

文章目录 1、新增操作&#xff08;Create&#xff09;1.1单行数据全列插入1.2多行数据指定列插入 2、查询操作&#xff08;Retrieve&#xff09;2.1全列查询2.2指定列查询2.3指定列查询2.4别名&#xff08;as&#xff09;2.5去重&#xff08;distinct&#xff09;2.6排序&#…