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

相关文章

破茧 JDBC:MyBatis 在 Spring Boot 中的轻量实践指南

《破茧JDBC:MyBatis在SpringBoot中的轻量实践指南》MyBatis是持久层框架,简化JDBC开发,通过接口+XML/注解实现数据访问,动态代理生成实现类,支持增删改查及参数... 目录一、什么是 MyBATis二、 MyBatis 入门2.1、创建项目2.2、配置数据库连接字符串2.3、入

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

Apache Ignite 与 Spring Boot 集成详细指南

《ApacheIgnite与SpringBoot集成详细指南》ApacheIgnite官方指南详解如何通过SpringBootStarter扩展实现自动配置,支持厚/轻客户端模式,简化Ign... 目录 一、背景:为什么需要这个集成? 二、两种集成方式(对应两种客户端模型) 三、方式一:自动配置 Thick

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

Python进行JSON和Excel文件转换处理指南

《Python进行JSON和Excel文件转换处理指南》在数据交换与系统集成中,JSON与Excel是两种极为常见的数据格式,本文将介绍如何使用Python实现将JSON转换为格式化的Excel文件,... 目录将 jsON 导入为格式化 Excel将 Excel 导出为结构化 JSON处理嵌套 JSON:

深入浅出SpringBoot WebSocket构建实时应用全面指南

《深入浅出SpringBootWebSocket构建实时应用全面指南》WebSocket是一种在单个TCP连接上进行全双工通信的协议,这篇文章主要为大家详细介绍了SpringBoot如何集成WebS... 目录前言为什么需要 WebSocketWebSocket 是什么Spring Boot 如何简化 We

Python极速搭建局域网文件共享服务器完整指南

《Python极速搭建局域网文件共享服务器完整指南》在办公室或家庭局域网中快速共享文件时,许多人会选择第三方工具或云存储服务,但这些方案往往存在隐私泄露风险或需要复杂配置,下面我们就来看看如何使用Py... 目录一、android基础版:HTTP文件共享的魔法命令1. 一行代码启动HTTP服务器2. 关键参

C++11范围for初始化列表auto decltype详解

《C++11范围for初始化列表autodecltype详解》C++11引入auto类型推导、decltype类型推断、统一列表初始化、范围for循环及智能指针,提升代码简洁性、类型安全与资源管理效... 目录C++11新特性1. 自动类型推导auto1.1 基本语法2. decltype3. 列表初始化3

C++11右值引用与Lambda表达式的使用

《C++11右值引用与Lambda表达式的使用》C++11引入右值引用,实现移动语义提升性能,支持资源转移与完美转发;同时引入Lambda表达式,简化匿名函数定义,通过捕获列表和参数列表灵活处理变量... 目录C++11新特性右值引用和移动语义左值 / 右值常见的左值和右值移动语义移动构造函数移动复制运算符