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

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

注意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 被销毁(例如当它超出作用域或被显式删除)时,它包含的所有元素也会被销毁。
    这确保了元素占用的内存被正确释放,避免了内存泄漏。
    在这里插入图片描述
    运行这段代码
    请注意,如果向量包含很多元素(或者其中包含的类型复制代价很高),那么复制向量可能会非常耗时。

附上原文链接

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

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-18 01:50:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-18 01:50:02       102 阅读
  3. 在Django里面运行非项目文件

    2024-06-18 01:50:02       83 阅读
  4. Python语言-面向对象

    2024-06-18 01:50:02       92 阅读

热门阅读

  1. react有什么特点

    2024-06-18 01:50:02       26 阅读
  2. Python内置函数pow()详解

    2024-06-18 01:50:02       28 阅读
  3. 【数据结构与算法】广度优先搜索(BFS)

    2024-06-18 01:50:02       27 阅读
  4. linux在文件夹中查找文件内容

    2024-06-18 01:50:02       26 阅读
  5. 自动化喷涂生产线控制方法概述

    2024-06-18 01:50:02       30 阅读
  6. Leetcode.2709 最大公约数遍历

    2024-06-18 01:50:02       34 阅读
  7. 常用的设计模式

    2024-06-18 01:50:02       29 阅读
  8. 服务器添加TLS域名证书核子之PKCS编解码

    2024-06-18 01:50:02       27 阅读
  9. WDF驱动开发-I/O请求的处理(四)

    2024-06-18 01:50:02       28 阅读