Day17 C++ vector 容器
2024.12.3 C++ vector 容器
C++ vector 容器
类比成数组
C++ 中的 vector 是一种序列容器,它允许你在运行时动态地插入和删除元素。
vector 是基于数组的数据结构,但它可以自动管理内存,这意味着你不需要手动分配和释放内存。
与 C++ 数组相比,vector 具有更多的灵活性和功能,使其成为 C++ 中常用的数据结构之一。
vector 是 C++ 标准模板库(STL)的一部分,提供了灵活的接口和高效的操作。
基本特性:
- 动态大小:
vector的大小可以根据需要自动增长和缩小。 - 连续存储:
vector中的元素在内存中是连续存储的,这使得访问元素非常快速。 - 可迭代:
vector可以被迭代,你可以使用循环(如for循环)来访问它的元素。 - 元素类型:
vector可以存储任何类型的元素,包括内置类型、对象、指针等。
使用场景:
- 当你需要一个可以动态增长和缩小的数组时。
- 当你需要频繁地在序列的末尾添加或移除元素时。
- 当你需要一个可以高效随机访问元素的容器时。
要使用 vector,首先需要包含 头文件:
#include <vector>
创建 Vector
创建一个 vector 可以像创建其他变量一样简单:
std::vector<int> myVector; // 创建一个存储整数的空 vector
这将创建一个空的整数向量,也可以在创建时指定初始大小和初始值:
std::vector<int> myVector(5); // 创建一个包含 5 个整数的 vector,每个值都为默认值(0)
std::vector<int> myVector(5, 10); // 创建一个包含 5 个整数的 vector,每个值都为 10
std::vecter<int> myVector(5); //5
std:vector<int> myVector(5,10); //5 10
或:
std::vector<int> vec; // 默认初始化一个空的 vector
std::vector<int> vec2 = {1, 2, 3, 4}; // 初始化一个包含元素的 vector
std::vector<int> vec2={1,2,3,4}
添加元素
可以使用 push_back 方法向 vector 中添加元素:
myVector.push_back(7); // 将整数 7 添加到 vector 的末尾
myvector.push_back(7);
访问元素
可以使用下标操作符 [] 或 at() 方法访问 vector 中的元素:
int x = myVector[0]; // 获取第一个元素
int y = myVector.at(1); // 获取第二个元素
int x = myVector[0];
int y = myVector.at(1);
获取大小
可以使用 size() 方法获取 vector 中元素的数量:
int size = myVector.size(); // 获取 vector 中的元素数量
int size = myVector.size();C
迭代访问
可以使用迭代器遍历 vector 中的元素:
for (auto it = myVector.begin(); it != myVector.end(); ++it) {std::cout << *it << " ";
}
//为什么这里有个星号呢?
//回答:迭代器本身只是一个指针,它并不直接存储数据。而 *it 会返回 it 所指向的元素的引用,允许你访问该元素的值。
//指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。 *it 是 解引用 操作符
for(auto it = myVector.begin();it!=myVector.end();++it){std::cout << *it << " ";
}
或者使用范围循环:
for (int element : myVector) {std::cout << element << " ";
}
for(int element : myVectot){std:cout << element << " ";
}
删除元素
可以使用 erase() 方法删除 vector 中的元素:
myVector.erase(myVector.begin() + 2); // 删除第三个元素
myVector.erase(myVector.begin() + 2);
清空 Vector
可以使用 clear() 方法清空 vector 中的所有元素:
myVector.clear(); // 清空 vector
myVector.clear(); // 清空 vector
综合实例
以下是一个完整的使用实例,包括创建 vector、添加元素、访问元素以及输出结果的代码:
#include <iostream>
#include <vector>int main() {// 创建一个空的整数向量std::vector<int> myVector;// 添加元素到向量中myVector.push_back(3);myVector.push_back(7);myVector.push_back(11);myVector.push_back(5);// 访问向量中的元素并输出std::cout << "Elements in the vector: ";for (int element : myVector) {std::cout << element << " ";}std::cout << std::endl;// 访问向量中的第一个元素并输出std::cout << "First element: " << myVector[0] << std::endl;// 访问向量中的第二个元素并输出std::cout << "Second element: " << myVector.at(1) << std::endl;// 获取向量的大小并输出std::cout << "Size of the vector: " << myVector.size() << std::endl;// 删除向量中的第三个元素myVector.erase(myVector.begin() + 2);// 输出删除元素后的向量std::cout << "Elements in the vector after erasing: ";for (int element : myVector) {std::cout << element << " ";}std::cout << std::endl;// 清空向量并输出myVector.clear();std::cout << "Size of the vector after clearing: " << myVector.size() << std::endl;return 0;
}
以上代码创建了一个整数向量,向其中添加了几个元素,然后输出了向量的内容、元素的访问、向量的大小等信息,接着删除了向量中的第三个元素,并输出删除元素后的向量。最后清空了向量,并输出清空后的向量大小。
输出结果为:
Elements in the vector: 3 7 11 5
First element: 3
Second element: 7
Size of the vector: 4
Elements in the vector after erasing: 3 7 5
Size of the vector after clearing: 0
相关文章:
Day17 C++ vector 容器
2024.12.3 C vector 容器 C vector 容器 类比成数组 C 中的 vector 是一种序列容器,它允许你在运行时动态地插入和删除元素。 vector 是基于数组的数据结构,但它可以自动管理内存,这意味着你不需要手动分配和释放内存。 与 C 数组相比&a…...
常见Linux命令(详解)
文章目录 常见Linux命令文件目录类命令pwd 打印当前目录的绝对路径ls 列出目录内容cd 切换路径mkdir 建立目录rmdir 删除目录touch 创建空文件cp 复制文件或目录rm 移除文件或者目录mv 移动文件与目录或重命名cat 查看文件内容more 文件分屏查看器less 分屏显示文件内容head 显…...
AgGrid 组件封装设计笔记:自定义 icon 以及每个 icon 的点击事件处理
文章目录 问题目前解决效果 v1思路 目前解决效果 v0思路 代码V1 问题 自己封装的 AgGrid 如何自定义传递 icon ,以及点击事件的处理? 目前解决效果 v1 思路 目前解决效果 v0 思路 一张图片说明一下 代码 V1 父组件使用 <template><MyPageL…...
vb.net常用命名空间
.NET的命名空间分为两个主要部分。一个是与微软程序语言相关的microsoft,一个是与操作系统相关的system,其中system主要分为应用程序类的命名空间和WEB程序类的命名空间两部分。 下面是常见的命名空间: Microsoft.VisualBasic 包含VB.NET的RUNTIME和编译运行VB程序…...
Netty面试内容整理-Netty 工作原理
Netty 的工作原理主要基于异步、事件驱动的 I/O 模型,结合 Reactor 多线程模式和高效内存管理来实现高并发网络通信。以下是 Netty 的工作原理详细解析: Reactor 线程模型 Netty 基于 Reactor 模式 来处理并发连接和 I/O 操作,主要分为 单线程模型、多线程模型 和 主从多线程…...
CMD 介绍
CMD 介绍 CMD 是 Windows 操作系统中的命令提示符(Command Prompt)程序,它是一种命令行工具,可以让用户通过键入命令来与计算机进行交互。 DOS: disk operating system, 磁盘操作系统. 是利用命令行来操作计算机. DOS 不是 CMD…...
【项目日记】仿mudou的高并发服务器 --- 实现HTTP服务器
对于生命,你不妨大胆一点, 因为我们始终要失去它。 --- 尼采 --- ✨✨✨项目地址在这里 ✨✨✨ ✨✨✨https://gitee.com/penggli_2_0/TcpServer✨✨✨ 仿mudou的高并发服务器 1 前言2 Util工具类3 HTTP协议3.1 HTTP请求3.2 HTTP应答 4 上下文解析模块…...
Android 使用TabLayout + ViewPager2 实现标签页的视图切换
学习笔记 步骤概览 添加依赖创建布局文件创建 ViewPager2 适配器设置 TabLayout 和 ViewPager2 的联动自定义每个页面内容(Fragment)自定义 TabLayout 样式(可选) 1. 添加依赖 首先,你需要在 build.gradle 文件中添…...
vue 项目实现阻止浏览器记住密码
在各个浏览器中,登录输入密码一般都会弹出是否记住密码的功能,如果记住之后,会在各个密码框自动填充记住的密码,这无疑是一种不安全的操作,所以要实现禁用阻止浏览器记住密码的行为 查阅资料,也得到很多…...
7. 一分钟读懂“单例模式”
7.1 模式介绍 单例模式就像公司里的 打印机队列管理系统,无论有多少员工提交打印任务,大家的请求都汇总到唯一的打印管理中心,按顺序排队输出。这个中心必须全局唯一,避免多个队列出现资源冲突,保证打印任务井然有序。…...
28个炫酷的纯CSS特效动画示例(含源代码)
CSS是网页的三驾马车之一,是对页面布局的总管家,2024年了,这里列出28个超级炫酷的纯CSS动画示例,让您的网站更加炫目多彩。 文章目录 1. 涌动的弹簧效果2. 超逼真的3D篮球弹跳,含挤压弹起模态3. 鼠标放div上࿰…...
百问FB网络编程 - 主要函数介绍
6.3 网络编程主要函数介绍 下面全部函数的头文件都是 #include <sys/types.h> #include <sys/socket.h>6.3.1 socket函数 int socket(int domain, int type,int protocol);此函数用于创建一个套接字。 domain是网络程序所在的主机采用的通讯协族(AF_UNIX和AF_I…...
Unity类银河战士恶魔城学习总结(P155 More example on audio effects更多的音效细节)
【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili 教程源地址:https://www.udemy.com/course/2d-rpg-alexdev/ 本章节添加了更多的音效细节 音频管理器 AudioManager.cs 使得多个音效可以同时播放,注释掉以下代码 public void PlaySFX(in…...
【题解】—— LeetCode一周小结48
🌟欢迎来到 我的博客 —— 探索技术的无限可能! 🌟博客的简介(文章目录) 【题解】—— 每日一道题目栏 上接:【题解】—— LeetCode一周小结47 25.网络延迟时间 题目链接:743. 网络延迟时间 …...
040集——CAD中放烟花(CAD—C#二次开发入门)
效果如下: 单一颜色的烟花: 渐变色的火花: namespace AcTools {public class HH{public static TransientManager tm TransientManager.CurrentTransientManager;public static Random rand new Random();public static Vector3D G new V…...
一文理解多模态大语言模型——下
作者:Sebastian Raschka 博士, 翻译:张晶,Linux Fundation APAC Open Source Evangelist 编者按:本文并不是逐字逐句翻译,而是以更有利于中文读者理解的目标,做了删减、重构和意译,…...
ROS2创建 base 包用于其他模块的参数配置和头文件依赖
Demo 背景 ROS2项目开发中存在以下需求:有多个包需要读取一些共同的配置项(以txt或者yaml形式存在),且依赖于一些公用的utils工具代码(C)。Solution: 创建一个 base_config 包来“存放” 配置文件和公用的头文件。gitee address: Gitee/CDal…...
自然语言处理期末试题汇总
建议自己做,写完再来对答案。答案可能存在极小部分错误,不保证一定正确。 一、选择题 1-10、C A D B D B C D A A 11-20、A A A C A B D B B A 21-30、B C C D D A C A C B 31-40、B B B C D A B B A A 41-50、B D B C A B B B B C 51-60、A D D …...
前端热门面试题目(四)——计算机网路篇
计算机网络常见面试题: 计算机网络面试(一) 计算机网络面试(二) 计算机网络速成: 计算机网络速成一 计算机网络速成二 计算机网络速成三 2. HTTP 1.0 和 2.0 的区别 连接复用: HTTP/1.0 使用短连…...
kubenetes流水线实施清单
整体实施方案概述 创建命名空间(Namespace):创建一个专用于 CI/CD 的命名空间 cicd。配置 Secrets: Git SSH 密钥(分别为 Maven 和 npm 项目)Docker Registry 凭证(Kaniko)SMTP 凭证…...
【Mojo+Python企业级混合编程实战指南】:20年架构师亲授3大高频场景落地方法论
第一章:Mojo与Python混合编程的企业级价值全景图Mojo 是一种专为 AI 原生系统设计的现代系统编程语言,兼具 Python 的表达力与 C/Rust 级别的性能。在企业级 AI 工程实践中,Mojo 并非旨在替代 Python,而是以“无缝互操作”为核心理…...
安全测试入门:开发与测试都需要知道的OWASP TOP 10
为何OWASP TOP 10是测试人员的必修课?在数字化浪潮席卷全球的今天,软件已深度融入商业运营与社会生活。每一次点击、每一次数据交换的背后,都潜藏着安全风险。对于软件测试从业者而言,功能与性能测试仅是基础,安全测试…...
别再被 CAD+GIS 折腾到崩溃!这款插件让你效率翻 10 倍,一键搞定所有地理信息处理
做测绘、规划、市政设计的你,是不是每天都在被这些问题折磨?CAD 里画好图,切到 GIS 软件导数据,反复切换动辄半小时;加载大型影像文件卡到死机,属性表管理杂乱无章;想把 GIS 属性标到图纸上&…...
MelonLoader完全解决方案:Unity游戏Mod加载实战指南
MelonLoader完全解决方案:Unity游戏Mod加载实战指南 【免费下载链接】MelonLoader The Worlds First Universal Mod Loader for Unity Games compatible with both Il2Cpp and Mono 项目地址: https://gitcode.com/gh_mirrors/me/MelonLoader 当你兴致勃勃地…...
近期 GitHub 上爆火的 34 个极具潜力的开源项目
Coasts GitHub 链接:https://github.com/coast-guard/coasts 一款为 Git 工作区打造的本地主机服务隔离与编排工具,由前 Y Combinator 创始人开发。将自主智能体的主机全访问权限这一安全风险规避,智能体可在容器化主机内创建环境、运行服务…...
GLM-4.1V-9B-Base入门必看:中文提问技巧——如何写出高稳定度问题
GLM-4.1V-9B-Base入门必看:中文提问技巧——如何写出高稳定度问题 1. 认识GLM-4.1V-9B-Base GLM-4.1V-9B-Base是智谱开源的视觉多模态理解模型,专门用于处理图像内容识别、场景描述、目标问答等中文视觉理解任务。与普通聊天模型不同,它更擅…...
Streamlit+像素风=高效零售AI?Ostrakon-VL部署完整指南
Streamlit像素风高效零售AI?Ostrakon-VL部署完整指南 1. 项目概览:当零售AI遇上像素艺术 想象一下,你正在玩一款90年代的复古游戏,但这次你不是在打怪升级,而是在用AI分析零售店铺的货架陈列。这就是Ostrakon-VL扫描…...
Mojo结构体直传Python内存视图:零序列化跨语言数据流实现(附GDB内存布局验证截图)
第一章:Mojo结构体直传Python内存视图:零序列化跨语言数据流实现(附GDB内存布局验证截图)Mojo 通过其底层 value 和 parameter 机制,允许结构体在不触发拷贝或序列化的情况下,直接暴露为 Python 的 memoryv…...
PhotoMaker性能基准测试终极指南:建立你的AI人像生成速度参考标准
PhotoMaker性能基准测试终极指南:建立你的AI人像生成速度参考标准 【免费下载链接】PhotoMaker 项目地址: https://ai.gitcode.com/hf_mirrors/TencentARC/PhotoMaker 想要了解PhotoMaker的实际性能表现吗?作为一款革命性的AI人像生成工具&#…...
OpenClaw技能开发入门:为Qwen3-4B定制专属自动化模块
OpenClaw技能开发入门:为Qwen3-4B定制专属自动化模块 1. 为什么需要自定义OpenClaw技能 去年夏天,我接手了一个重复性极高的周报生成工作。每周都要从十几个PDF报告中提取关键数据,整理成固定格式的Excel表格,再转成PPT汇报。当…...
