C++中的动态数组vector的基本操作
文章目录
- 前言
- 一、vector数组的声明
- 二、vector数组的初始化
- 三、vector数组的大小
- 1. 在声明时设置大小
- 2. 修改大小
- 3. 查看大小
- 四、添加元素与删除元素
- 1. 添加元素
- 2. 删除元素
- 总结
前言
在 C++ 中,std::vector 是一个标准库中的容器类型。它是一个动态数组,可以根据需要动态增长或缩小其大小,并提供了许多有用的方法来操作其中的元素。本文主要介绍vector数组的基本操作,适合对vector有基本了解的读者,如果你完全不了解vector,请看我的上一篇博文:
C++中的vector简介
一、vector数组的声明
vector数据类型在使用的时候,需要引用相应的头文件:
#include <vector>
std::vector<int> myVector;// 声明一个整型 vector
以上代码是声明一个myVector数组,其类型为int,没有进行初始化赋值,那么其默认长度为0;
二、vector数组的初始化
可以在声明的同时进行初始化:
std::vector<int> myVector = {1, 2, 3, 4, 5};
以上代码声明并初始化一个包含 5 个元素整型 vector,此时数组的长度为5。
但是以下这种方法是不合法的:
std::vector<int> myVector;
myVector = {1, 2, 3, 4, 5};
一旦声明以后,该动态数组的初始大小就是0了,此时不能直接给它赋值,不然会超出内存,而应该先声明内存大小再进行赋值,这里只需要知道即可,等你看完后面的介绍,自然就会明白了。
三、vector数组的大小
1. 在声明时设置大小
也可以在声明的时候不进行初始化,但是规定其大小:
int initialSize = 5;
std::vector<int> myVector(initialSize); // 声明一个包含 5 个元素的整型 vector
2. 修改大小
也可以用resize,修改myVector的大小
std::vector<int> myVector; // 声明一个整型 vector
// 修改 myVector 的大小为 5
myVector.resize(5);
3. 查看大小
要查看 vector 的大小,可以使用 size() 方法。以下是一个示例代码:
#include <iostream>
#include <vector>int main() {std::vector<int> myVector = {1, 2, 3, 4, 5}; // 声明一个整型 vector,并初始化// 输出 vector 的大小std::cout << "Vector size: " << myVector.size() << std::endl;return 0;
}
在这个示例中,我们使用 myVector.size() 来获取整型 vector myVector 的大小,并将其输出到控制台。通过调用 size() 方法,你可以得知 vector 中元素的数量。
四、添加元素与删除元素
1. 添加元素
在 C++ 中,向 vector 添加元素可以使用以下方法:
使用 push_back() 方法:push_back() 方法用于在 myVector 的末尾添加新的元素。
std::vector<int> myVector = {1, 2, 3};
// 向 myVector 中逐个添加元素
myVector.push_back(1);
myVector.push_back(2);
myVector.push_back(3);
使用 emplace_back() 方法:emplace_back() 方法可以通过原地构造的方式在 vector 的末尾添加新元素,效率更高。
std::vector<std::string> myVector = {"apple", "banana"};
myVector.emplace_back("orange"); // 在末尾原地构造添加元素"orange"
使用 insert() 方法:insert() 方法可以在指定位置插入一个或多个元素。
std::vector<int> myVector = {1, 2, 5, 6};
myVector.insert(vec.begin() + 2, 3); // 在指定位置插入元素3,当前位置为第三个元素
2. 删除元素
要删除 vector 中的元素,可以使用以下方法:
使用 erase() 方法:可以通过 erase() 方法删除指定位置的元素或者一定范围内的元素。
std::vector<int> myVector = {1, 2, 3, 4, 5};
// 删除指定位置的元素,比如删除第三个元素(索引为2)
myVector.erase(myVector.begin() + 2);
// 删除指定范围内的元素,比如删除第二个到第四个元素(索引为1到3)
myVector.erase(myVector.begin() + 1, myVector.begin() + 4);
使用 pop_back() 方法:可以删除 vector 中最后一个元素。
std::vector<int> myVector = {1, 2, 3, 4, 5};
myVector.pop_back(); // 删除最后一个元素
使用自定义逻辑删除元素:可以根据自定义的条件使用算法函数结合 erase-remove idiom 删除符合条件的元素。
std::vector<int> myVector= {1, 2, 3, 4, 5};
// 删除所有奇数元素
myVector.erase(std::remove_if(myVector.begin(), myVector.end(), [](int i){ return i % 2 != 0; }), myVector.end());
这些是常用的删除 vector 元素的方法,根据具体需求选择适合的方法来操作 vector。
总结
本文较为详细地介绍了C++中的vector数组的基本操作,给出了每种操作的多种可能方法,此外,vector的容量(capacity)和大小(size)比较容易混淆,我将在后续的文章中用实例演示的方法来详细说明。本文内容如有不对指出,欢迎您指出!如有问题,欢迎评论区交流!
相关文章:
C++中的动态数组vector的基本操作
文章目录 前言一、vector数组的声明二、vector数组的初始化三、vector数组的大小1. 在声明时设置大小2. 修改大小3. 查看大小 四、添加元素与删除元素1. 添加元素2. 删除元素 总结 前言 在 C 中,std::vector 是一个标准库中的容器类型。它是一个动态数组࿰…...
vsc ctrl+. 无效的问题
描述 ubuntu ibus 输入法 vsc ctrl.快捷键无效 输出 _e 解决方案: 运行 ibus-setup 把表情符号这里的快捷键改了...
科大讯飞开放平台-python语音转文字教程
文章目录 简介实际使用代码coding简介 科大讯飞的语音转写(Long Form ASR)——基于深度全序列卷积神经网络,将长段音频(5小时以内)数据转换成文本数据,为信息处理和数据挖掘提供基础。 转写的是已录制音频(非实时),音频文件上传成功后进入等待队列,待转写成功后用户…...
【LeetCode: 433. 最小基因变化 + BFS】
🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…...
Python 安装目录及虚拟环境详解
Python 安装目录 原文链接:https://blog.csdn.net/xhyue_0209/article/details/106661191 Python 虚拟环境 python 虚拟环境图解 python 虚拟环境配置与详情 原文链接:https://www.cnblogs.com/hhaostudy/p/17321646.html...
linux sh脚本编写
linux中bash Shell 是 Linux 的核心部分,它允许你使用各种诸如 cd、ls、cat 等的命令与 Linux 内核进行交互。Bash脚本和Shell脚本实际上是指同一种类型的脚本,只不过Bash是其中最常用的一种Shell。除了Bash之外,常见的Shell解释器还有C She…...
代码随想录笔记|C++数据结构与算法学习笔记-字符串(二)|28. 实现 strStr()、459.重复的子字符串、KMP算法
文章目录 卡码网.右旋字符串28. 实现 strStr()KMP算法(理论)KMP算法(代码)C代码 459.重复的子字符串暴力解法移动匹配KMP解法 卡码网.右旋字符串 卡码网题目链接 略 28. 实现 strStr() 力扣题目链接 文字链接:28. 实现 strStr() 视频链接:帮你把KMP算法…...
【复杂网络建模】——建模工具Matlab入门
目录 一、认识MATLAB 二、认识工具箱 三、基本操作和函数 3.1 算术操作符 3.2 数学函数 3.3 矩阵操作 3.4 索引和切片 3.5 逻辑操作 3.6 控制流程 3.7 数据输入输出 四、变量和数据类型 4.1 数值类型 4.2 整型 4.3 复数 4.4 字符串 4.5 逻辑类型 4.6 结构体&a…...
JVM面试篇
面试篇就是复习前面学的 什么是JVM 1.定义:JVM指的是Java虚拟机,本质是一个运行在计算机上的程序 2.作用:为了支持Java中Write Once ,Run Anywhere 编写一次 到处运行的跨平台特性 功能: 1.解释和运行 2.内存管理…...
openEuler 22.03(华为欧拉)一键安装 Oracle 19C RAC(19.22) 数据库
前言 Oracle 一键安装脚本,演示 openEuler 22.03 一键安装 Oracle 19C RAC 过程(全程无需人工干预):(脚本包括 ORALCE PSU/OJVM 等补丁自动安装) ⭐️ 脚本下载地址:Shell脚本安装Oracle数据库…...
蓝桥杯刷题记录之数字王国之军训排队
记录 卡了半天,check函数中的temp % ele 0写成了ele % temp 0就挺无语的 思路 这个晚上在补 代码 import java.util.*; public class Main{static List<List<Integer>> que new ArrayList<>();static int MIN Integer.MAX_VALUE;static i…...
Go语言学习Day1:什么是Go?
名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 1、走近Go①Go语言的Logo②Go语言的创始人③Go语…...
C语言内存函数之 memcmp函数
memcmp函数的记忆:mem表示内存,单位是字节,表示以单位字节来进行操作;头文件是string.h,cmp是compare的缩写,表示比较。总的意思就是在规定的内存下以字节为单位一个字节一个字节的进行比较。 memcmp函数的…...
3. C++ 常见的段错误及对策
常见的 C/C 段错误及对策 一、指针没有指向一块合法的内存 定义了指针变量,但是没有为指针分配内存,即指针没有指向一块合法的内存。这里举几个比较隐蔽的例子。 结构体成员指针未初始化;没有为结构体指针分配足够的内存;函数的…...
推荐的Kubernetes 学习资料
官方文档: Kubernetes 官方文档:https://kubernetes.io/docs/Kubernetes 教程:https://kubernetes.io/docs/tutorials/ 书籍: Kubernetes in Action,Marko Luksa 著Kubernetes Up and Running,Kelsey Hi…...
MySQL之索引与事务
一 索引的概念 一种帮助系统查找信息的数据 数据库索引 是一个排序的列表,存储着索引值和这个值所对应的物理地址无须对整个表进行扫描,通过物理地 址就可以找到所需数据是表中一列或者若干列值排序的方法 需要额外的磁盘空间 索引的作用 1 数据库…...
Linux的基本使用
1.Linux的背景 1.1什么Linux Linux是⼀个操作系统.和Windows是"并列"的关系. 1.2Linux系统的优势 1. 开源(意味着免费,便宜) 2. 稳定(Linux可以运⾏很多年,都不会发⽣重⼤问题) 3. 安全(Linux只有管理员或者特定⽤⼾才能访问Linux内核) 4. ⾃由(不会被强加商业产品和…...
亚信安慧AntDB全景观察:数据库领域的创新者
随着大数据时代的到来,对数据库的需求愈发强烈。在这一背景下,国产数据库逐渐崭露头角,亚信安慧AntDB作为重要的代表产品之一正积极参与到激烈的市场竞争中。亚信安慧AntDB不仅追求技术的革新和突破,同时也致力于满足用户日益增长…...
Linux 系统是如何收发⽹络包的
Linux 系统是如何收发⽹络包的? ⽹络模型 为了使得多种设备能通过⽹络相互通信,和为了解决各种不同设备在⽹络互联中的兼容性问题,国际标准化组织制定了开放式系统互联通信参考模型(Open System Interconnection Reference Mode…...
飞跃前端瓶颈:技术进阶指南精华篇
引言: 在互联网的快车道上,前端技术日新月异。对于前端工程师而言,技术水平达到一定高度后,往往会遭遇成长的天花板。本文将探讨如何识别并突破这些技术瓶颈,分享实用的进阶策略和实践案例。 一、技术等级概览…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
