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

【编程语言】C++ 中 vector 初始化的多种方法详解

在 C++ 中,vector 是一个非常重要的数据结构,它提供了动态数组的功能,可以在运行时根据需要自动调整大小。vector 的初始化方法有多种,既可以简单地进行初始化,也可以根据特定的需求进行复杂的初始化。在这篇博客中,我们将详细介绍几种常见的 vector 初始化方式,特别是像下面这种具有特定长度的初始化:

vector<string> rows(min(numRows, int(s.size())));

基础 vector 初始化

1. 默认构造函数

使用默认构造函数创建一个空的 vector,这种方法最简单,但不会为 vector 分配任何初始容量。

vector<int> v; // 创建一个空的 `vector`

这个 vector 目前是空的,没有任何元素,使用 push_back() 可以动态地向其中添加元素。

2. 指定大小的构造函数

我们可以在构造 vector 的时候指定其初始大小,这样 vector 就会在创建时为这些元素分配内存。

vector<int> v(10); // 创建一个包含 10 个元素的 `vector`,每个元素默认初始化为 0

对于简单的类型(如 int),这些元素会被初始化为 0;对于复杂类型(如 string),元素将调用该类型的默认构造函数进行初始化。

vector<string> v(5); // 创建一个包含 5 个空字符串的 `vector`

3. 指定大小并初始化值

在创建 vector 的时候,我们可以同时指定元素的初始值。

vector<int> v(10, -1); // 创建一个包含 10 个元素的 `vector`,每个元素的值都为 -1

对于自定义类型或复杂类型,我们也可以指定默认构造之外的初始值。

vector<string> v(5, "hello"); // 创建一个包含 5 个元素的 `vector`,每个元素的初始值为 "hello"

动态确定大小的 vector 初始化

在 C++ 中,常常需要根据运行时条件动态确定 vector 的大小。例如,在处理字符串时,vector 的大小可能会取决于输入字符串的长度。在这种情况下,vector 的大小不能在编译时确定,因此我们需要根据运行时的信息动态分配。

示例:动态大小的 vector 初始化

考虑如下情况,我们要创建一个包含 numRows 行的 vector,但是要确保行数不超过输入字符串的长度 s.size()。这种情况下,我们可以使用 min 函数来确保 vector 的大小不会超出字符串的长度。

vector<string> rows(min(numRows, int(s.size())));

详细解析

1. min(numRows, int(s.size()))

min 是一个标准库函数,用来返回两个值中的较小值。在这里,numRows 是我们希望创建的行数,而 s.size() 是字符串的长度。我们使用 min 函数确保行数不会超过字符串的长度。

2. int(s.size())

由于 s.size() 返回的是一个 size_t 类型,而 min 函数的两个参数类型需要一致,因此需要将 s.size() 强制转换为 int。这是为了确保 min 函数可以正确比较 numRows 和字符串长度的大小。

3. vector<string> rows(...)

这部分代码创建了一个包含 min(numRows, int(s.size()))string 元素的 vector,每个元素都被默认初始化为空字符串。这种初始化方式确保了 vector 的大小与实际需求相匹配,从而避免了内存浪费。

常见的错误与注意事项

1. vector 的越界访问

当使用 vector 时,一定要确保访问的索引在合法范围内,否则会产生越界访问的错误。例如,vector 的大小为 5,那么合法的索引值应该是 04,访问 v[5] 将导致未定义行为。

2. 使用 resize 调整大小

如果在创建 vector 时未指定大小,但后续需要增加元素数目,可以使用 resize() 方法调整 vector 的大小。

vector<int> v;
v.resize(10); // 将 `vector` 的大小调整为 10,新增的元素会被默认初始化

3. reserveresize 的区别

reserve 预先为 vector 分配空间,但并不改变其当前的大小。resize 则会实际改变 vector 的大小,并初始化新增的元素。

vector<int> v;
v.reserve(10); // 为 10 个元素预留空间,但此时 `v` 的大小仍然为 0
v.resize(10);  // 将 `v` 的大小调整为 10

总结

C++ 中的 vector 提供了非常灵活的初始化方式,既可以在编译时确定其大小,也可以在运行时根据实际需要动态确定。通过使用 min 等函数,我们可以动态地控制 vector 的大小,从而提高程序的效率和安全性。


http://www.kler.cn/news/362241.html

相关文章:

  • 《Linux从小白到高手》综合应用篇:深入理解Linux常用关键内核参数及其调优
  • Unable to open nested entry ‘********.jar‘ 问题解决
  • redis 创建只读用户
  • Prometheus 抓取 nginx 访问日志的指标
  • element plus e-table表格中使用多选,当翻页时已选中的数据丢失
  • R语言统计分析——置换检验1
  • Git_命令
  • Golang 并发编程:Context 包的使用与并发控制
  • MongoDB安装配置及配置和启动服务
  • 使用Docker启动的Redis容器使用的配置文件路径等问题以及Python使用clickhouse_driver操作clickhouse数据库
  • 微知-RDMA中的四大M,以及Mellanox驱动中的MAD为什么叫MA的D?(managent agent、Management Datagrams)
  • 与ai一起作诗(《校园清廉韵》)
  • MATLAB和Python电车电池制造性能度量分析
  • Selenium自动化测试工具
  • Pytorch复习(三)
  • VMware虚拟机软件安装、卸载
  • 免费开源Odoo软件如何实现电商仓库高效发货
  • 【WebGIS】Cesium:GLTF数据加载
  • <Project-11 Calculator> 计算器 0.2 工时计算器 WorkHours Calculator HTTP + JS
  • scrapy案例——豆瓣电影Top250的爬取
  • 高校危化试剂仓储系统|基于SprinBoot+vue的高校危化试剂仓储系统设计与实现(源码+数据库+文档)
  • 上拉电阻和下拉电阻在电路中的作用(一)
  • HTTP安全么?如何更好的保护您的网站
  • 软件程序系统架构中MVC和三层架构分别是什么,有什么区别?
  • Jmeter接口测试企业级项目实战day2
  • 从不一样的角度体会MATLAB