【C++STL精讲】vector的基本使用与常用接口

news2024/11/13 19:07:47

在这里插入图片描述

文章目录

  • 💐专栏导读
  • 💐文章导读
  • 🌷vector是什么?
  • 🌷vector的基本使用
  • 🌷vector常用函数接口

💐专栏导读

🌸作者简介:花想云,在读本科生一枚,致力于 C/C++、Linux 学习。

🌸本文收录于 C++系列,本专栏主要内容为 C++ 初阶、C++ 进阶、STL 详解等,专为大学生打造全套 C++ 学习教程,持续更新!

🌸相关专栏推荐:C语言初阶系列C语言进阶系列数据结构与算法

💐文章导读

数据结构与算法的学习中,我们曾经认识过一个数据结构叫做顺序表。而我们之前用C语言实现的动态顺序表其实就是模仿STL中的vector容器,所以说我们其实对vector已经不算是完全陌生了,那么接下来就一起来看看STL中的vector到底是什么以及如何使用吧!
在这里插入图片描述

🌷vector是什么?

在C++中,STL(Standard Template Library)提供了一个名为vector的容器类,它是一个动态数组,能够存储同一类型的元素。vector的实现在底层使用了动态内存分配内存管理技术,因此它能够自动调整大小,并且可以高效地插入和删除元素。

vector提供了许多成员函数,如push_back()pop_back()at()front()back()等,这些函数可以用来操作vector中的元素。vector还支持迭代器,可以使用迭代器来访问vector中的元素。此外,vector还支持一些算法,如sort()find()count()等,可以方便地对vector中的元素进行排序、查找和计数等操作。

vectorC++ STL中最常用的容器之一,它可以代替数组,提供了更方便、更安全的操作方式,并且在插入和删除元素时不需要手动管理内存,因此被广泛应用于各种场景。

🌷vector的基本使用

  • 使用vector之前首先需要包含头文件< vector >
#include<vector>
  • 创建一个对象
  • 注意vectorstring类的使用不同,vector并不是类型名,使用时需要指定vector中的元素类型,例如:vector< typename > 对象名
	vector<int> v1;  //元素类型为int
	vector<char> v2;  //元素类型为char
	vector<string> v3;  //元素类型为string
	vector<vector<int>> v4;  //元素类型为vector<int>
  • 向vector中添加元素
	vector<int> v1;
	//使用push_back进行尾插
	v1.push_back(1);
	v1.push_back(2);
  • 访问vector中的元素
	cout << v1[0] << endl; //使用下标+[]进行元素访问
	cout << v1[1] << endl;
	cout << v1.front() << endl; //获取第一个元素
	cout << v1.back() << endl; //获取最后一个元素
  • 删除vector中的元素
	//使用pop_back进行尾删
	v1.pop_back();
  • 获取vector的大小和容量
	cout << v1.size() << endl;
	cout << v1.capacity() << endl;
  • 遍历vector中的元素
	for (int i = 0; i < v1.size(); i++)
	{
		cout << v1[i] << ' ';
	}
	cout << endl;
	//使用范围for
	for (auto e : v1)
	{
		cout << e << ' ';
	}
	cout << endl;
  • 向指定位置插入元素
	//v1.begin()——返回一个指向字符串第一个元素的迭代器
	v1.insert(v1.begin() + 3, 30); //在第三个位置插入元素
  • 删除指定位置的元素
	v1.erase(v1.begin() + 4); //删除第四个位置的元素

🌷vector常用函数接口

  • at:访问vector中指定下标的元素,支持下标越界检查
	v1.at(0); //访问下标为0的元素
	v1.at(2);
  • empty:判断vector是否为空;
	cout << v1.empty() << endl;
  • resize:改变vector的大小,若扩容,则还可以初始化扩容的部分;
	v1.resize(10, 0); //扩容,并初始化为0
  • reserve:扩容;
	v1.reserve(20); //扩容,使capacity为20
  • emplace_back:在vector的末尾添加一个元素,效率比push_back更高;
	v1.emplace_back(10); //尾插10
  • emplace:在vector的指定位置插入一个元素,效率比insert更高;
	v1.emplace(v1.begin() + 4, 40); //在下标为4的位置插入40
  • swap:交换两个vector的元素;
	vector<int> v1;
	vector<int> v2;
	v1.swap(v2);
  • clear:清空vector中的所有元素。
	v1.clear();

总结,以上函数接口在平时做题当中已经足够使用了,想要了解更多接口的使用,我们必须学会查阅官方文档。
在这里插入图片描述

点击下方个人名片,可添加博主的个人QQ,交流会更方便哦~
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓

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

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

相关文章

HAL库版FreeRTOS(上)

目录 FreeRTOS 简介初识FreeRTOS什么是FreeRTOS?为什么选择FreeRTOS&#xff1f;FreeRTOS 的特点商业许可 磨刀不误砍柴工查找资料FreeRTOS 官方文档Cortex-M 架构资料 FreeRTOS 源码初探FreeRTOS 源码下载FreeRTOS 文件预览 FreeRTOS 移植FreeRTOS 移植移植前准备添加FreeRTO…

浏览器断点调试说明

断点调试 断点调试面板 功能按钮介绍 描述&#xff1a;继续执行脚本 或者叫&#xff08;逐过程执行&#xff09; 快捷键 &#xff08;F8&#xff09;或者是&#xff08;Ctrl\&#xff09; 作用&#xff1a;打断点了的地方&#xff08;比如有是三个断点地方&#xff09;就会 第一…

大数据能力提升项目|学生成果展系列之四

导读 为了发挥清华大学多学科优势&#xff0c;搭建跨学科交叉融合平台&#xff0c;创新跨学科交叉培养模式&#xff0c;培养具有大数据思维和应用创新的“π”型人才&#xff0c;由清华大学研究生院、清华大学大数据研究中心及相关院系共同设计组织的“清华大学大数据能力提升项…

13.vue-cli

单页面应用程序&#xff1a;所有的功能只在index.html中完成 vue-cli是vue版的webpack 目录 1 安装vue-cli 2 创建项目 3 使用预设 4 删除预设 5 开启项目 6 项目文件内容 6.1 node_moduls 中是项目依赖的库 6.2 public 6.2.1 favicon.ico 是浏览器页签内部…

尚融宝——整合OpenFeign与Sentinel实现兜底方法——验证手机号码是否注册功能

一、整合过程 在项目添加依赖&#xff1a;添加位置 <!--服务调用--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency> 在需要的服务中添加启动注…

spring中常见的注解

DI(依赖注入中常见的注解) Autowired&#xff1a;按类型自动装配Resource&#xff1a;按名称或类型自动装配&#xff0c;Qualifier&#xff1a;按名称自动装配&#xff0c;Value &#xff1a;注入int、float、String等基本数据类型&#xff0c;只能标注在成员变量、setter方法上…

【Gradle-1】入门Gradle,前置必读

1、为什么要学习Gradle Gradle作为Android开发默认的构建工具&#xff0c;你的每一次编译都会用到它。招聘要求从以前的熟悉加分&#xff0c;到现在的必备技能&#xff0c;可见Gradle的重要性。 做开发这么久了&#xff0c;你是否对Gradle又爱又恨&#xff1f;是否对Gradle的…

第三章(1):自然语言处理概述:应用、历史和未来

第三章&#xff08;1&#xff09;&#xff1a;自然语言处理概述&#xff1a;应用、历史和未来 目录第三章&#xff08;1&#xff09;&#xff1a;自然语言处理概述&#xff1a;应用、历史和未来1. 自然语言处理概述&#xff1a;应用、历史和未来1.1 主要应用1.2 历史1.3 NLP的新…

【科普】PCB为什么常用50Ω阻抗?6大原因

在PCB设计中&#xff0c;阻抗通常是指传输线的特性阻抗&#xff0c;这是电磁波在导线中传输时的特性阻抗&#xff0c;与导线的几何形状、介质材料和导线周围环境等因素有关。 对于一般的高速数字信号传输和RF电路&#xff0c;50Ω是一个常用的阻抗值。 为什么是50Ω&#xff1f…

《程序员面试金典(第6版)》面试题 10.09. 排序矩阵查找(观察法,二分法,分治算法入门题目,C++)

题目描述 给定MN矩阵&#xff0c;每一行、每一列都按升序排列&#xff0c;请编写代码找出某元素。 示例: 现有矩阵 matrix 如下&#xff1a;[[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[10, 13, 14, 17, 24],[18, 21, 23, 26, 30] ]给定 target 5&…

wma格式怎么转换mp3,4种方法超快学

其实我们在任何电子设备上所获取的音频文件都具有自己的格式&#xff0c;每种格式又对应着自己的属性特点。比如wma就是一种音质优于MP3的音频格式&#xff0c;虽然很多小伙伴比较青睐于wma所具有的音质效果&#xff0c;但也不得不去考虑因wma自身兼容性而引起很多播放器不能支…

【高危】Apache Solr 代码执行漏洞(MPS-wic0-9hjb)

漏洞描述 Apache Solr 是一款开源的搜索引擎。 在Apache Solr 受影响版本中&#xff0c;由于Solr默认配置下存在服务端请求伪造漏洞&#xff0c;且SolrResourceLoader中实现了java SPI机制。当Solr以SolrCloud模式启动时&#xff0c;攻击者可以通过构造恶意的solrconfig.xml文…

几个最基本软件的环境变量配置

在Windows中配置环境变量位置&#xff1a; 控制面板->系统和安全->系统。可以点击&#xff1a;“此电脑”->“属性”直接进入。 点击“高级系统设置”->【环境变量】。在这里可以看见用户变量和系统变量&#xff0c;如果你这台机器不是你一个人使用设置为用户变量…

接口文档设计避坑指南

我们做后端开发的,经常需要定义接口文档。 最近在做接口文档评审的时候&#xff0c;发现一个小伙伴定义的出参是个枚举值&#xff0c;但是接口文档没有给出对应具体的枚举值。其实&#xff0c;如何写好接口文档&#xff0c;真的很重要。今天田螺哥&#xff0c;给你带来接口文档…

Vue学习笔记(4. 生命周期)

1. 生命周期写法&#xff08;vue2与vue3比对&#xff09; 创建前&#xff1a;vue3 setup, vue2 beforeCreate //组件创建前执行的函数 创建后&#xff1a;vue3 setup, vue2 created //组件创建后执行的函数 挂载前&#xff1a;vue3 onBeforeMount, vue2 beforeMount //挂…

FastViT: A Fast Hybrid Vision Transformer using Structural Reparameterization

FastViT: A Fast Hybrid Vision Transformer using Structural Reparameterization 论文地址&#xff1a;https://arxiv.org/pdf/2303.14189.pdf 概述 本文提出了一种通用的 CNN 和 Transformer 混合的视觉基础模型 移动设备和 ImageNet 数据集上的精度相同的前提下&#xf…

SpringBoot自动配置原理分析

前言&#xff1a; 虽然工作中一直使用的是自研的一款基于spring的框架&#xff0c;但是随着springboot在各公司的广泛使用&#xff0c;公司的一些新项目也开始逐渐使用springBoot了&#xff0c;那么springBoot的一些特性就要仔细学习一下了。 什么是自动配置&#xff1f; 还记…

【牛客刷题专栏】0x21:JZ20 表示数值的字符串(C语言编程题)

前言 个人推荐在牛客网刷题(点击可以跳转)&#xff0c;它登陆后会保存刷题记录进度&#xff0c;重新登录时写过的题目代码不会丢失。个人刷题练习系列专栏&#xff1a;个人CSDN牛客刷题专栏。 题目来自&#xff1a;牛客/题库 / 在线编程 / 剑指offer&#xff1a; 目录 前言问…

Voice Control for ChatGPT 轻松实现使用语音与ChatGPT进行对话。

缘由 日常生活中&#xff0c;我们与亲人朋友沟通交流一般都是喜欢语音的形式来完成的&#xff0c;毕竟相对于文字来说语音就不会显的那么的苍白无力&#xff0c;同时最大的好处就是能解放我们的双手吧&#xff0c;能更快实现两者间的对话&#xff0c;沟通便更高效了。Voice Co…

【瑞吉外卖】002 -- 后台登录功能开发

本文章为对 黑马程序员Java项目实战《瑞吉外卖》的学习记录 目录 一、需求分析 1、页面原型展示 2、登录页面展示 3、查看登录请求信息 4、数据模型 二、代码开发 1、创建实体类Employee&#xff0c;和employee表进行映射 2、创建包结构&#xff1a;&#xff08;Controller、Se…