C++初学者指南第一步---5.介绍std::vector

2024-06-17 23:12

本文主要是介绍C++初学者指南第一步---5.介绍std::vector,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

C++初学者指南第一步—5.介绍std::vector

目录

  • C++初学者指南第一步---5.介绍std::vector
    • 1.初始化/访问
    • 2.添加元素
    • 3.Resizing调整大小
    • 4.在尾部删除元素
    • 5. 复制一直是深拷贝!

注意std代表C++标准库的命名空间,vector(向量)是标准库中的一种数据容器:动态数组,用vector向量这个名称不太准确,因为历史原因一直保留下来,适应就好。

  • C++的默认动态数组
  • 数组 =可以保存相同类型的不同值/对象
  • 动态 =大小可以在运行时更改

这是一个简短的介绍,作为C++初学者指南的一部分。如果您正在寻找包含指导方针、最佳实践和常见错误的更完整的接口概述,请参阅此页。

1.初始化/访问

#include <vector>                   //头文件
std::vector<int> v {2, 7, 9};       //用3哥元素初始化vector
cout << v.size() << '\n';           //3 (vector中的元素个数)
cout << v[0] << '\n';               //2
cout << v[1] << '\n';               //7
v[1] = 4;                           //赋予新的值
cout << v[1] << '\n';               //4
cout << v.front() << '\n';          //2(第一个元素)
cout << v.back()  << '\n';          //9(最后一个元素)

注意
在这里插入图片描述
这里声明和定义了两个int型vector,第一个vector是用花括号初始化,是用花括号里的值对动态数组进行初始化。第二个vector用小括号是调用了vector的构造函数进行初始化,第一个参数是元素个数,第二哥参数是元素的值,这里是2。

2.添加元素

vector<T>::push_back(Element)

在vector的末尾添加一个类型为 T 的元素
在这里插入图片描述
运行这段代码

3.Resizing调整大小

在这里插入图片描述
运行这段代码

4.在尾部删除元素

在这里插入图片描述
运行这段代码

5. 复制一直是深拷贝!

vector被称作常规类型,也就是说,它在以下方面与 int 的行为类似:

  • 深度复制:复制创建一个新的向量对象,并复制其中包含的所有对象。
  • 深度赋值:将所有包含对象从源复制到赋值目标。
  • 深度比较:比较两个vector时,比较其包含所有对象的值
  • 深拥有:销毁vector将销毁所有包含的对象
    C++标准库和生态系统中的大多数类型都是常规的。

这里讲的有些简单容易误解我再详细说一下:

  1. 深拷贝(Deep Copying):
    当你拷贝一个 vector (例如 vector v2 = v1;)时,会创建一个全新的 vector 对象,并且将原 vector 中的所有元素(这里是整数)都拷贝过去。
    这意味着对拷贝后的 vector 进行修改(例如添加或删除元素)不会影响到原来的 vector。
  2. 深赋值(Deep Assignment):
    当你将一个 vector 赋值给另一个 vector (例如 v1 = v2;)时,源 vector (v2) 中的所有元素都会被拷贝到目标 vector (v1) 中。
    赋值之后,这两个 vector 包含的元素是相同的,可以独立地进行修改而不会影响到对方。
  3. 深比较(Deep Comparison):
    当你比较两个 vector (例如 v1 == v2)时,比较是逐个元素进行的。
    比较会检查两个 vector 中的所有元素是否完全相等,比较的是元素的具体值。
  4. 深拥有(Deep Ownership):
    当一个 vector 被销毁(例如当它超出作用域或被显式删除)时,它包含的所有元素也会被销毁。
    这确保了元素占用的内存被正确释放,避免了内存泄漏。
    在这里插入图片描述
    运行这段代码
    请注意,如果向量包含很多元素(或者其中包含的类型复制代价很高),那么复制向量可能会非常耗时。

附上原文链接

如果文章对您有用请随手点个赞,谢谢!

这篇关于C++初学者指南第一步---5.介绍std::vector的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1070676

相关文章

C#如何调用C++库

《C#如何调用C++库》:本文主要介绍C#如何调用C++库方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录方法一:使用P/Invoke1. 导出C++函数2. 定义P/Invoke签名3. 调用C++函数方法二:使用C++/CLI作为桥接1. 创建C++/CL

SpringBoot整合OpenFeign的完整指南

《SpringBoot整合OpenFeign的完整指南》OpenFeign是由Netflix开发的一个声明式Web服务客户端,它使得编写HTTP客户端变得更加简单,本文为大家介绍了SpringBoot... 目录什么是OpenFeign环境准备创建 Spring Boot 项目添加依赖启用 OpenFeig

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

SpringBoot请求参数接收控制指南分享

《SpringBoot请求参数接收控制指南分享》:本文主要介绍SpringBoot请求参数接收控制指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring Boot 请求参数接收控制指南1. 概述2. 有注解时参数接收方式对比3. 无注解时接收参数默认位置

redis过期key的删除策略介绍

《redis过期key的删除策略介绍》:本文主要介绍redis过期key的删除策略,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录第一种策略:被动删除第二种策略:定期删除第三种策略:强制删除关于big key的清理UNLINK命令FLUSHALL/FLUSHDB命

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

CentOS7更改默认SSH端口与配置指南

《CentOS7更改默认SSH端口与配置指南》SSH是Linux服务器远程管理的核心工具,其默认监听端口为22,由于端口22众所周知,这也使得服务器容易受到自动化扫描和暴力破解攻击,本文将系统性地介绍... 目录引言为什么要更改 SSH 默认端口?步骤详解:如何更改 Centos 7 的 SSH 默认端口1

SpringBoot多数据源配置完整指南

《SpringBoot多数据源配置完整指南》在复杂的企业应用中,经常需要连接多个数据库,SpringBoot提供了灵活的多数据源配置方式,以下是详细的实现方案,需要的朋友可以参考下... 目录一、基础多数据源配置1. 添加依赖2. 配置多个数据源3. 配置数据源Bean二、JPA多数据源配置1. 配置主数据

Linux下如何使用C++获取硬件信息

《Linux下如何使用C++获取硬件信息》这篇文章主要为大家详细介绍了如何使用C++实现获取CPU,主板,磁盘,BIOS信息等硬件信息,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录方法获取CPU信息:读取"/proc/cpuinfo"文件获取磁盘信息:读取"/proc/diskstats"文

python中各种常见文件的读写操作与类型转换详细指南

《python中各种常见文件的读写操作与类型转换详细指南》这篇文章主要为大家详细介绍了python中各种常见文件(txt,xls,csv,sql,二进制文件)的读写操作与类型转换,感兴趣的小伙伴可以跟... 目录1.文件txt读写标准用法1.1写入文件1.2读取文件2. 二进制文件读取3. 大文件读取3.1