C++STL中vector的介绍与使用

在C++ STL中,vector 是一个非常重要的容器,它提供了动态数组的功能。以下是 vector 头文件中的一些常用函数及其使用方法和细节,以及在算法竞赛中的使用细节和总结:

1. 构造、析构、赋值

  • 构造函数 (std::vector::vector): 可以无参数构造一个空的 vector,也可以指定大小或大小和初始值构造。
    vector<int> v; // 默认构造
    vector<int> v(10); // 构造包含10个元素的vector,值未定义
    vector<int> v(10, 1); // 构造包含10个元素的vector,每个元素初始化为1
    vector<int> v(other.begin(), other.end()); // 构造一个包含other中所有元素的vector
    
  • 析构函数 (std::vector::~vector): 销毁 vector,释放所有资源。
  • 赋值操作符 (std::vector::operator=): 将一个 vector 的内容赋值给另一个 vector
    vector<int> v1 = {1, 2, 3};
    vector<int> v2;
    v2 = v1; // v2现在包含v1的所有元素
    

2. Iterators 迭代器

  • std::vector::begin: 返回指向 vector 开始的迭代器。
  • std::vector::end: 返回指向 vector 结束的迭代器。
  • std::vector::rbeginstd::vector::rend: 返回反向迭代器。

3. Capacity 容量

  • std::vector::size: 查询 vector 的大小。
  • std::vector::max_size: 查询 vector 能容纳的最大元素数量。
  • std::vector::resize: 改变 vector 的大小。
    v.resize(20); // 将vector大小改为20,超出原大小的元素被默认构造
    v.resize(20, 1); // 将vector大小改为20,超出原大小的元素被初始化为1
    
  • std::vector::capacity: 查询 vector 的容量。
  • std::vector::empty: 检查 vector 是否为空。
  • std::vector::reserve: 改变 vector 的容量,但不改变其大小。
  • std::vector::shrink_to_fit: 减小 vector 的容量以适应其大小(C++11)。

4. Element access 元素访问

  • std::vector::operator[]: 通过下标访问元素。
  • std::vector::at: 通过下标访问元素,越界时抛出异常。
  • std::vector::front: 访问第一个元素。
  • std::vector::back: 访问最后一个元素。
  • std::vector::data: 获取指向 vector 元素的指针(C++11)。

5. Modifiers 内容修改

  • std::vector::assign: 替换 vector 的所有元素。
  • std::vector::push_back: 在 vector 末尾添加一个元素。
  • std::vector::pop_back: 删除 vector 的最后一个元素。
  • std::vector::insert: 在指定位置插入元素。
    v.insert(v.begin() + 1, 5, 50); // 在第二个位置插入5个50
    v.insert(v.begin() + 1, {1, 2, 3}); // 在第二个位置插入{1, 2, 3}
    
  • std::vector::erase: 删除指定位置的元素或范围。
    v.erase(v.begin() + 1); // 删除第二个元素
    v.erase(v.begin() + 1, v.begin() + 3); // 删除从第二个到第三个(不包括第三个)的元素
    
  • std::vector::swap: 交换两个 vector 的内容。
  • std::vector::clear: 移除 vector 的所有元素。
  • std::vector::emplacestd::vector::emplace_back: 构造元素而非复制或移动(C++11)。

算法竞赛中的使用细节和总结

  • 性能考虑vectorpush_backpop_back 操作通常非常快,但如果需要频繁在 vector 的中间插入或删除元素,可能会因为需要移动大量元素而导致性能下降。
  • 内存管理vector 会自动管理内存,但了解其内部的内存分配策略(如何时进行内存重新分配)可以帮助优化性能。
  • 空间效率:使用 reserve 可以避免不必要的内存重新分配,提高空间效率。
  • 代码简洁vector 提供的迭代器和算法使得处理元素集合变得非常简洁。
  • 异常安全:在竞赛中,需要考虑代码的异常安全性,vector 的操作通常是强异常安全的。

官方vector的更加详细的介绍如下

vector - C++ Reference

以上是对 vector 头文件中各种函数的详细介绍和使用方法,以及在算法竞赛中的一些使用细节和总结。希望这些信息能帮助你更好地理解和使用 vector

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

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

相关文章

python-Flask:SQLite数据库路径不正确但是成功访问到了数据库,并对表进行了操作

出现了这个问题&#xff0c;就好像是我要去找在南方的人&#xff0c;然后我刚好不分南北&#xff0c;我认为的方向错了&#xff0c;实则方向对了。 在我针对复盘解决&#xff1a;sqlite3.OperationalError: unrecognized token: “{“-CSDN博客这个内容的时候&#xff0c;又出现…

对称密码算法(分组密码算法 序列密码算法 密码杂凑算法)中的基本操作

对称密码算法(分组密码算法 序列密码算法 密码杂凑算法)中的基本操作 相比非对称加密算法&#xff0c;对称加密算法因为加解密效率较高&#xff0c;因而在日常使用中更加广泛。为了让大家更加熟悉常见的对称加密算法&#xff0c;本文列举出了对称密码算法设计中经常用到的13种基…

大数据治理,数字化转型运营平台建设方案(PPT完整版)

1、大数据治理整体运营思路 2、数据资产定义及流程规范 3、治理规范及质量管控 4、质量考核标准及提升方案 软件全套资料部分文档清单&#xff1a; 工作安排任务书&#xff0c;可行性分析报告&#xff0c;立项申请审批表&#xff0c;产品需求规格说明书&#xff0c;需求调研计划…

专题十四——BFS

目录 一BFS解决FloodFill算法 1图像渲染 2岛屿数量 3岛屿的最大面积 4被环绕的区域 二BFS解决蛋源最短路径问题 1迷宫中离入口最近的出口 2最小基因变化 3单词接龙 4为高尔夫比赛砍树 三BFS解决多源最短路径问题 1 01矩阵 2飞地的数量 3地图中的最高点 4地图分…

DMDRS部署:搭建DM8-DM8数据同步

一、部署要求 1.1 硬件要求 DMDRS服务描述源DMDRS 内存要求至少2GB的内存空间。推荐配置4GB及以上的内存空间。 源DMDRS对内存空间的需求主要与装载的并发数相关。当内存空间配置低于2GB时&#xff0c;可以调整装载的线程数来降低源DMDRS对内存空间的需求。 磁盘要求至少10GB…

仓颉笔记——windows11安装启用cangjie语言,并使用vscode编写“你好,世界”

2025年1月1日第一篇日记&#xff0c;大家新年好。 去年就大致看了一下&#xff0c;感觉还不错&#xff0c;但一直没上手&#xff0c;这次借着元旦的晚上安装了一下&#xff0c;今年正式开动&#xff0c;公司众多的应用国产化正等着~~ 第一步&#xff1a;准备 官网&#xff1a;…

datalist的作用?怎么用的?

在 HTML 中&#xff0c;<datalist> 元素用于为 <input> 元素提供一个可选项列表&#xff0c;帮助用户通过预定义的选项进行快速选择。它是一个增强输入体验的功能&#xff0c;类似于自动完成&#xff08;autocomplete&#xff09;&#xff0c;但与传统的 <selec…

Cocos2dx Lua绑定生成中间文件时参数类型与源码类型不匹配

这两天维护的一个项目&#xff0c;使用arm64-v8a指令集编译时遇到了报错&#xff0c;提示类型不匹配&#xff0c;具体报错的代码【脚本根据C源文件生成的中间文件】如下&#xff1a; const google::protobuf::RepeatedField<unsigned long long>& ret cobj->equi…

1、ELK的架构和安装

ELK简介 elk&#xff1a;elasticsearch logstash kibana&#xff0c;统一日志收集系统。 elasticsearch&#xff1a;分布式的全文索引引擎的非关系数据库&#xff0c;json格式&#xff0c;在elk中存储所有的日志信息&#xff0c;架构有主和从&#xff0c;最少需要2台。 …

常用的数据库类型都有哪些

在Java开发和信息系统架构中&#xff0c;数据库扮演着存储和管理数据的关键角色。数据库种类繁多&#xff0c;各有特色&#xff0c;适用于不同的应用场景。 1. 关系型数据库&#xff08;RDBMS&#xff09;&#xff1a; • 关系型数据库是最为人熟知的数据库类型&#xff0c;数据…

百度贴吧的ip属地什么意思?怎么看ip属地

在数字化时代&#xff0c;IP地址不仅是网络设备的唯一标识符&#xff0c;更承载着用户的网络身份与位置信息。百度贴吧作为广受欢迎的社交平台&#xff0c;也遵循相关规定&#xff0c;在用户个人主页等位置展示账号IP属地信息。那么&#xff0c;百度贴吧的IP属地究竟意味着什么…

微服务篇-深入了解 XXL-JOB 分布式任务调度的具体使用(XXL-JOB 的工作流程、框架搭建)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 XXL-JOB 调度中心概述 1.2 XXL-JOB 工作流程 1.3 Cron 表达式调度 2.0 XXL-JOB 框架搭建 2.1 XXL-JOB 调度中心的搭建 2.2 XXL-JOB 执行器的搭建 2.3 使用调度中心…

Unity Shader TexelSize的意义

TexelSize在制作玻璃折射效果时会用到。 // Get the normal in tangent space fixed3 bump UnpackNormal(tex2D(_BumpMap, i.uv.zw)); // Compute the offset in tangent space float2 offset bump.xy * _Distortion * _RefractionTex_TexelSize.xy; i.scrPos.xy offset * i…

Python面向对象进阶

思维导图 Python面向对象进阶的思维导图 私有权限 私有属性 为了更好的限制属性的访问和包含隐私&#xff0c;可以给属性设置私有权限。 当把属性设置为私有属性后&#xff0c;则该属性只能被本类直接访问。 定义私有属性语法&#xff1a; 设置和获取私有属性值语法&…

Github 正常访问但是ping不同也无法进行git操作

Github 正常访问但是ping不同也无法进行git操作 原因&#xff1a;在git push 的时候 发现一直push不上去。 $ git push interview master ssh: connect to host github.com port 22: Connection timed out fatal: Could not read from remote repository.Please make sure yo…

基于Springboot + vue实现的夕阳红公寓管理系统

&#x1f942;(❁◡❁)您的点赞&#x1f44d;➕评论&#x1f4dd;➕收藏⭐是作者创作的最大动力&#x1f91e; &#x1f496;&#x1f4d5;&#x1f389;&#x1f525; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4dd;欢迎留言讨论 &#x1f525;&#x1f525;&…

gesp(C++二级)(16)洛谷:B4037:[GESP202409 二级] 小杨的 N 字矩阵

gesp(C++二级)(16)洛谷:B4037:[GESP202409 二级] 小杨的 N 字矩阵 题目描述 小杨想要构造一个 m m m \times m m

【brew安装失败】DNS 查询 raw.githubusercontent.com 返回的是 0.0.0.0

从你提供的 nslookup 输出看&#xff0c;DNS 查询 raw.githubusercontent.com 返回的是 0.0.0.0&#xff0c;这通常意味着无法解析该域名或该域名被某些 DNS 屏蔽了。这种情况通常有几个可能的原因&#xff1a; 可能的原因和解决方法 本地 DNS 问题&#xff1a; 有可能是你的本…

C++ 【回调函数】详解与代码解读

在现代软件开发中&#xff0c;回调函数是一个常用的工具&#xff0c;能够实现函数调用的延迟绑定&#xff0c;广泛应用于事件驱动、异步操作以及模块解耦等场景。本文将从基础概念、分类、实现方式到代码示例&#xff0c;全面讲解 C 回调函数的实现和应用。 什么是回调函数&…

嵌入式开发之使用 FileZilla 在 Windows 和 Ubuntu 之间传文件

01-FileZilla简介 FileZilla 是一个常用的文件传输工具&#xff0c;它支持多种文件传输协议&#xff0c;包括以下主要协议&#xff1a; FTP (File Transfer Protocol) 这是 FileZilla 最基本支持的协议。FTP 是一种明文传输协议&#xff0c;不加密数据&#xff08;包括用户名和…