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…...
飞跃前端瓶颈:技术进阶指南精华篇
引言: 在互联网的快车道上,前端技术日新月异。对于前端工程师而言,技术水平达到一定高度后,往往会遭遇成长的天花板。本文将探讨如何识别并突破这些技术瓶颈,分享实用的进阶策略和实践案例。 一、技术等级概览…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能
1. 开发环境准备 安装DevEco Studio 3.1: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK 项目配置: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...
MyBatis中关于缓存的理解
MyBatis缓存 MyBatis系统当中默认定义两级缓存:一级缓存、二级缓存 默认情况下,只有一级缓存开启(sqlSession级别的缓存)二级缓存需要手动开启配置,需要局域namespace级别的缓存 一级缓存(本地缓存&#…...
Matlab实现任意伪彩色图像可视化显示
Matlab实现任意伪彩色图像可视化显示 1、灰度原始图像2、RGB彩色原始图像 在科研研究中,如何展示好看的实验结果图像非常重要!!! 1、灰度原始图像 灰度图像每个像素点只有一个数值,代表该点的亮度(或…...
qt+vs Generated File下的moc_和ui_文件丢失导致 error LNK2001
qt 5.9.7 vs2013 qt add-in 2.3.2 起因是添加一个新的控件类,直接把源文件拖进VS的项目里,然后VS卡住十秒,然后编译就报一堆 error LNK2001 一看项目的Generated Files下的moc_和ui_文件丢失了一部分,导致编译的时候找不到了。因…...
stm32进入Infinite_Loop原因(因为有系统中断函数未自定义实现)
这是系统中断服务程序的默认处理汇编函数,如果我们没有定义实现某个中断函数,那么当stm32产生了该中断时,就会默认跑这里来了,所以我们打开了什么中断,一定要记得实现对应的系统中断函数,否则会进来一直循环…...
