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

C++(23):容器类<vector>

目录

一、核心概念     

二、基本语法

1. 头文件

2. 声明与初始化

三、常用操作

四、具体实例

1、size()、front()、back()

2、push_back()、pop_back()、capacity()

3、reserve() 


一、核心概念     

        Vectors 包含着一系列连续存储的元素,其行为和数组类似。

        C++标准模板库(STL)是C++标准库的核心组件,提供了一套通用的数据结构和算法模板。其中<vector>是最常用的容器之一,实现了动态数组的功能。

        vector是一种序列容器,内部使用动态分配的数组存储元素。它支持快速随机访问,可以通过下标直接访问任意元素,时间复杂度为O(1)。与普通数组不同,vector能自动管理内存,当元素数量超过当前容量时会自动扩容,通常按原有容量的1.5或2倍进行扩展。

二、基本语法

1. 头文件

         在 C++ 中,使用 <vector> 需要包含头文件 <vector>。

#include <vector>
2. 声明与初始化

        <vector> 需要指定元素类型,可通过多种方式进行初始化。

vector<T> vec;            // 默认初始化(空vector)
vector<T> vec(n);         // 创建包含n个默认初始化元素的vector
vector<T> vec(n, value);  // 创建包含n个值为value的元素的vector
vector<T> vec{1, 2, 3};  // 初始化列表(C++11)#include <iostream>
#include <vector>int main() {std::vector<int> vec1;                  // 空的vectorstd::vector<int> vec2(5);               // 长度为5的vector,元素默认初始化std::vector<int> vec3(5, 10);           // 长度为5的vector,元素值为10std::vector<int> vec4 = {1, 2, 3, 4};   // 使用初始化列表初始化return 0;
}
//声明一个 vector
std::vector<int> myVector;//添加元素
myVector.push_back(10);//访问元素
int firstElement = myVector[0];//获取元素数量
size_t size = myVector.size();//清空 vector
myVector.clear();

三、常用操作

方法/操作功能描述时间复杂度
vec.push_back(x)在末尾添加元素O(1)平均
vec.pop_back()删除末尾元素O(1)
vec.size()返回当前元素数量O(1)
vec.empty()检查是否为空O(1)
vec[i]通过下标访问元素(无边界检查)O(1)
vec.at(i)通过下标访问元素(带边界检查)O(1)
vec.front()访问第一个元素O(1)
vec.back()访问最后一个元素O(1)
vec.clear()清空所有元素O(n)

四、具体实例

1、size()、front()、back()

#include <iostream>
#include <vector>using namespace std;int main() {vector<int> vec = { 1, 2, 3, 4, 5 };// 遍历输出所有元素cout << "向量元素:";for (int i = 0; i < vec.size(); ++i) {cout << vec[i] << " ";}cout << endl;// 获取首尾元素cout << "首元素:" << vec.front() << endl;cout << "末元素:" << vec.back() << endl;return 0;
}

#include <iostream>
#include <vector>using namespace std;int main() {// 创建整型向量容器vector<int> numbers;// 向容器添加数据numbers.push_back(1);  // 末尾插入元素10numbers.push_back(2);  // 末尾插入元素20numbers.push_back(3);  // 末尾插入元素30// 显示当前容器内容cout << "当前容器元素:";for (int i = 0; i < numbers.size(); ++i) {cout << numbers[i] << " ";}cout << endl;// 继续追加元素numbers.push_back(4);  // 末尾插入元素40numbers.push_back(5);  // 末尾插入元素50// 展示更新后的元素集合std::cout << "新增元素后容器内容:";for (int i = 0; i < numbers.size(); ++i) {cout << numbers[i] << " ";}cout << endl;// 获取首元素cout << "容器首元素为:" << numbers[0] << endl;// 清空容器数据numbers.clear();// 验证容器状态if (numbers.empty()) {cout << "当前容器已清空" << endl;}return 0;
}
2、push_back()、pop_back()、capacity()

#include <iostream>
#include <vector>
using namespace std;int main() {vector<int> vec;    // 创建整型向量容器// 向容器添加元素vec.push_back(1);  vec.push_back(1);  vec.push_back(2);  vec.push_back(8);// 显示容器元信息cout << "当前元素数量:" << vec.size() << endl;cout << "当前存储容量:" << vec.capacity() << endl;// 移除最后一个元素vec.pop_back();cout << "删除末尾元素后,数量:" << vec.size() << endl;return 0;
}

3、reserve() 

#include <iostream>
#include <vector>
using namespace std;int main() {vector<int> vec;          // 创建整型向量容器vec.reserve(10);          // 预分配容量空间,避免多次内存分配for (int i = 0; i < 10; ++i) {vec.push_back(i);     // 添加元素到容器末尾cout << "添加元素后的容量:" << i << ",当前容量:" << vec.capacity() << endl;}return 0;
}

相关文章:

C++(23):容器类<vector>

目录 一、核心概念 二、基本语法 1. 头文件 2. 声明与初始化 三、常用操作 四、具体实例 1、size()、front()、back() 2、push_back()、pop_back()、capacity() 3、reserve&#xff08;&#xff09; 一、核心概念 Vectors 包含着一系列连续存储的元素,其行为…...

Hugo 安装保姆级教程(搭建个人blog)

Hogo 安装保姆级教程 友链 参考文章&#xff1a; https://blog.csdn.net/xianyun_0355/article/details/140261279 前言 Hugo 是 Go 编写的静态网站生成器&#xff0c;速度快&#xff0c;易用&#xff0c;可配置。作为一款跨平台开源建站系统&#xff0c;当前提供 Windows&…...

tomcat查看状态页及调优信息

准备工作 先准备一台已经安装好tomcat的虚拟机&#xff0c;tomcat默认是状态页是默认被禁用的 1.添加授权用户 vim /usr/local/tomcat/conf/tomcat-users.xml22 <role rolename"manager-gui"/>23 <user username"admin" password"tomcat&q…...

从坏道扫描到错误修复:HD Tune实战指南

一、硬盘检测的必要性 随着计算机使用时间的增加&#xff0c;机械硬盘和固态硬盘都会出现不同程度的性能衰减。定期进行硬盘健康检查可以&#xff1a;及时发现潜在故障&#xff1b;预防数据丢失风险&#xff1b;掌握存储设备实际状态。 二、HD Tune功能解析 性能测试&#x…...

将嵌入映射到 Elasticsearch 字段类型:semantic_text、dense_vector、sparse_vector

作者&#xff1a; Andre Luiz 讨论如何以及何时使用 semantic_text、dense_vector 或 sparse_vector&#xff0c;以及它们与嵌入生成的关系。 通过这个自定进度的 Search AI 实践学习亲自体验向量搜索。你可以开始免费云试用&#xff0c;或者在本地机器上尝试 Elastic。 多年来…...

【LeetCode 热题100】17:电话号码的字母组合(详细解析)(Go语言版)

☎️ LeetCode 17. 电话号码的字母组合&#xff08;回溯 DFS 详解&#xff09; &#x1f4cc; 题目描述 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按任意顺序返回。 数字到字母的映射如下&#xff08;与电话按键相同&#xff09;…...

解决uni-app开发中的“TypeError: Cannot read property ‘0‘ of undefined“问题

问题背景 在使用uni-app开发小程序或App时&#xff0c;你可能会遇到这样一个错误: TypeError: Cannot read property 0 of undefinedat uni.promisify.adaptor.js:7这个错误看起来很唬人&#xff0c;但它实际上与uni-app框架中的Promise适配器有关。今天&#xff0c;我们将深…...

翻译:20250518

翻译题 文章目录 翻译题一带一路中国结 一带一路 The “One Belt and One Road” Initiative aims to achieve win-win and shared development. China remains unchanged in its commitment to foster partnerships. China pursues an independent foreign policy of peace, …...

西门子1200/1500博图(TIA Portal)寻址方式详解

西门子博图&#xff08;TIA Portal&#xff09;是西门子公司推出的自动化工程软件平台&#xff0c;广泛应用于工业自动化领域。在编写PLC程序时&#xff0c;寻址方式是一个非常重要的概念&#xff0c;它决定了如何访问和操作PLC中的数据和资源。本文将详细介绍西门子博图中的寻…...

《Python星球日记》 第78天:CV 基础与图像处理

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、计算机视觉(CV)简介1. 什么是计算机视觉?2. 计算机视觉的应用场景3. 图像的基本属性a》像素(Pixel)b》通道(Channel)c》分辨率(Res…...

踩坑:uiautomatorviewer.bat 打不开

错误信息 运行 sdk\tools\bin\uiautomatorviewer.bat 报错 -Djava.ext.dirs..\lib\x86_64;..\lib is not supported. Use -classpath instead. Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit. 原因 java版…...

Atcoder Beginner Contest 406

比赛链接&#xff1a;ABC406 A - Not Acceptable 将小时转换成分钟直接进行判断。 时间复杂度&#xff1a; O ( 1 ) O(1) O(1)。 #include <bits/stdc.h> using namespace std;int main() {ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);int a,…...

记录一次win11本地部署deepseek的过程

20250518 win11 docker安装部署 ollama安装 ragflow部署 deepseek部署 文章目录 1 部署Ollama下载安装ollama配置环境变量通过ollama下载模型deepseek-r1:7b 2 部署docker2.1 官网下载amd版本安装2.2 配置wsl2.3 Docker配置&#xff1a;位置代理镜像源 3 部署RAGFlow更换ragfl…...

嵌入式STM32学习——外部中断EXTI与NVIC的基础练习⭐

按键控制LED灯 按键控制LED的开发流程&#xff1a; 第一步&#xff1a;使能功能复用时钟 第二布&#xff0c;配置复用寄存器 第三步&#xff0c;配置中断屏蔽寄存器 固件库按键控制LED灯 外部中断EXTI结构体&#xff1a;typedef struct{uint32_t EXTI_Line; …...

进程状态并详解S和D状态

#define TASK_RUNNING 0x0000 // 运行或就绪&#xff08;在运行队列&#xff09; #define TASK_INTERRUPTIBLE 0x0001 // 可中断睡眠&#xff08;S状态&#xff09; #define TASK_UNINTERRUPTIBLE 0x0002 // 不可中断睡眠&#xff08;D状态&#xff09; #define __TASK_STOP…...

数据获取_Python

1 导入数据 (1) 文件系统 ①表格形式的数据:CSV/Excel import pandas as pd# 读取 CSV 文件 data pd.read_csv(sales_data.csv)# 读取excel data2 pd.read_excel(file.xlsx, sheet_nameSheet2, skiprows5, nrows100) ②JSON # 使用 pandas 库 import pandas as pddata pd…...

<前端小白> 前端网页知识点总结

HTML 标签 1. 标题标签 h1到h6 2. 段落标签 p 3. 换行 br 水平线 hr 4. 加粗 strong 倾斜 em 下划线 ins 删除 del 5. 图像标签 img src-图像的位置 alt- 图片加载失败显示的文字 替换文本 title--- 鼠标放到图片上显示的文字 提示…...

历史数据分析——宁波海运

运输服务 运输服务板块简介: 运输服务板块主要是为货物与人员流动提供核心服务的企业的集合,涵盖铁路、公路、航空、海运、物流等细分领域。该板块具有强周期属性,与经济复苏、政策调控、供需关系密切关联,尤其是海运领域。有不少国内股市的铁路、公路等相关的上市公司同…...

小结:jvm 类加载过程

类加载过程 是Java虚拟机&#xff08;JVM&#xff09;将字节码文件&#xff08;.class文件&#xff09;加载到内存中&#xff0c;并转换为运行时数据结构的过程。这个过程可以分为多个步骤&#xff0c;每个步骤都有其特定的任务和目的。根据你提供的信息&#xff0c;以下是类加…...

OpenCv高阶(八)——摄像头调用、摄像头OCR

文章目录 前言一、摄像头调用通用方法1、导入必要的库2、创建摄像头接口 二、摄像头OCR1.引入库2、定义函数&#xff08;1&#xff09;定义显示opencv显示函数&#xff08;2&#xff09;保持宽高比的缩放函数&#xff08;3&#xff09;坐标点排序函数&#xff08;4&#xff09;…...

Java开发经验——阿里巴巴编码规范实践解析3

摘要 本文深入解析了阿里巴巴编码规范中关于错误码的制定与管理原则&#xff0c;强调错误码应便于快速溯源和沟通标准化&#xff0c;避免过于复杂。介绍了错误码的命名与设计示例&#xff0c;推荐采用模块前缀、错误类型码和业务编号的结构。同时&#xff0c;探讨了项目错误信…...

MySQL——6、内置函数

内置函数 1、日期函数2、字符串函数3、数学函数4、其他函数 1、日期函数 1.1、获取当前日期&#xff1a; 1.2、获取当前时间&#xff1a; 1.3、获取当前时间戳&#xff1a; 1.4、获取当前日期时间&#xff1a; 1.5、提取出日期&#xff1a; 1.6、给日期添加天数或时间…...

MySQL如何查看某个表所占空间大小?(表空间大小查看方法)

文章目录 一、使用SQL查询查看表空间1.1 查询所有表的大小&#xff08;包括数据和索引&#xff09;1.2 查询特定数据库的表大小1.3 查询单个表的详细空间信息 二、使用命令行工具查看表空间2.1 使用mysql客户端查询2.2 查看物理文件大小&#xff08;适用于MyISAM/InnoDB&#x…...

软件架构之-论软件系统架构评估以及应用

论软件系统架构评估以及应用 摘要正文 摘要 2023年2月&#xff0c;本人所在集团公司承接了长三角地区某省渔船图纸电子化审查系统项目开发&#xff0c;该项目旨在为长三角地区渔船建造设计院&#xff0c;以及渔船图纸审查机构提供一个便捷化的服务平台。在此项目中&#xff0c;…...

低延迟与高性能的技术优势解析:SmartPlayer VS VLC Media Player

在实时视频流的应用中&#xff0c;RTSP&#xff08;Real-Time Streaming Protocol&#xff09;播放器扮演着至关重要的角色&#xff0c;尤其是在视频监控、远程医疗、直播等高实时性需求的场景中。随着行业需求的不断升级&#xff0c;对播放器的低延迟、稳定性、兼容性等方面的…...

pytorch小记(十九):深入理解 PyTorch 的 `torch.randint()` 与 `.long()` 转换

pytorch小记&#xff08;十九&#xff09;&#xff1a;深入理解 PyTorch 的 torch.randint 与 .long 转换 一、torch.randint() 基本概念示例&#xff1a;生成一个二维随机整型张量 二、为什么需要调用 .long()三、典型场景示例1. 随机索引采样2. 伪标签生成3. 直接在 GPU 上生…...

深入解析Spring Boot与微服务架构:从入门到实践

深入解析Spring Boot与微服务架构&#xff1a;从入门到实践 引言 Spring Boot作为Java生态中最受欢迎的框架之一&#xff0c;以其简洁的配置和强大的功能赢得了开发者的青睐。本文将带领大家从Spring Boot的基础知识入手&#xff0c;逐步深入到微服务架构的实践&#xff0c;帮…...

【交互 / 差分约束】

题目 代码 #include <bits/stdc.h> using namespace std; using ll long long;const int N 10510; const int M 200 * 500 10; int h[N], ne[M], e[M], w[M], idx; ll d[N]; int n, m; bool st[N]; int cnt[N];void add(int a, int b, int c) {w[idx] c, e[idx] b…...

宝塔面板部署前后端项目SpringBoot+Vue2

这篇博客主要用来记录宝塔部署前端后端项目的过程。因为宝塔部署有点麻烦&#xff0c;至少在我看来挺麻烦的。我还是喜欢原始的ssh连接服务器进行操作。但是公司有项目用到了宝塔&#xff0c;没办法啊&#xff0c;只能摸索记录一下。 我们需要提前准备好后端项目的jar包和前端项…...

现代生活健康养生新视角

在科技飞速发展的今天&#xff0c;我们的生活方式发生巨大转变&#xff0c;健康养生也需要新视角。从光线、声音等生活细节入手&#xff0c;能为健康管理开辟新路径。​ 光线与健康密切相关。早晨接触自然光线&#xff0c;可调节生物钟&#xff0c;提升血清素水平&#xff0c;…...