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

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 中&#xff0c;std::vector 是一个标准库中的容器类型。它是一个动态数组&#xff0…...

vsc ctrl+. 无效的问题

描述 ubuntu ibus 输入法 vsc ctrl.快捷键无效 输出 _e 解决方案: 运行 ibus-setup 把表情符号这里的快捷键改了...

科大讯飞开放平台-python语音转文字教程

文章目录 简介实际使用代码coding简介 科大讯飞的语音转写(Long Form ASR)——基于深度全序列卷积神经网络,将长段音频(5小时以内)数据转换成文本数据,为信息处理和数据挖掘提供基础。 转写的是已录制音频(非实时),音频文件上传成功后进入等待队列,待转写成功后用户…...

【LeetCode: 433. 最小基因变化 + BFS】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…...

Python 安装目录及虚拟环境详解

Python 安装目录 原文链接&#xff1a;https://blog.csdn.net/xhyue_0209/article/details/106661191 Python 虚拟环境 python 虚拟环境图解 python 虚拟环境配置与详情 原文链接&#xff1a;https://www.cnblogs.com/hhaostudy/p/17321646.html...

linux sh脚本编写

linux中bash Shell 是 Linux 的核心部分&#xff0c;它允许你使用各种诸如 cd、ls、cat 等的命令与 Linux 内核进行交互。Bash脚本和Shell脚本实际上是指同一种类型的脚本&#xff0c;只不过Bash是其中最常用的一种Shell。除了Bash之外&#xff0c;常见的Shell解释器还有C She…...

代码随想录笔记|C++数据结构与算法学习笔记-字符串(二)|28. 实现 strStr()、459.重复的子字符串、KMP算法

文章目录 卡码网.右旋字符串28. 实现 strStr()KMP算法(理论)KMP算法(代码)C代码 459.重复的子字符串暴力解法移动匹配KMP解法 卡码网.右旋字符串 卡码网题目链接 略 28. 实现 strStr() 力扣题目链接 文字链接&#xff1a;28. 实现 strStr() 视频链接&#xff1a;帮你把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.定义&#xff1a;JVM指的是Java虚拟机&#xff0c;本质是一个运行在计算机上的程序 2.作用&#xff1a;为了支持Java中Write Once &#xff0c;Run Anywhere 编写一次 到处运行的跨平台特性 功能&#xff1a; 1.解释和运行 2.内存管理…...

openEuler 22.03(华为欧拉)一键安装 Oracle 19C RAC(19.22) 数据库

前言 Oracle 一键安装脚本&#xff0c;演示 openEuler 22.03 一键安装 Oracle 19C RAC 过程&#xff08;全程无需人工干预&#xff09;&#xff1a;&#xff08;脚本包括 ORALCE PSU/OJVM 等补丁自动安装&#xff09; ⭐️ 脚本下载地址&#xff1a;Shell脚本安装Oracle数据库…...

蓝桥杯刷题记录之数字王国之军训排队

记录 卡了半天&#xff0c;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?

名人说&#xff1a;莫道桑榆晚&#xff0c;为霞尚满天。——刘禹锡&#xff08;刘梦得&#xff0c;诗豪&#xff09; 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 1、走近Go①Go语言的Logo②Go语言的创始人③Go语…...

C语言内存函数之 memcmp函数

memcmp函数的记忆&#xff1a;mem表示内存&#xff0c;单位是字节&#xff0c;表示以单位字节来进行操作&#xff1b;头文件是string.h&#xff0c;cmp是compare的缩写&#xff0c;表示比较。总的意思就是在规定的内存下以字节为单位一个字节一个字节的进行比较。 memcmp函数的…...

3. C++ 常见的段错误及对策

常见的 C/C 段错误及对策 一、指针没有指向一块合法的内存 定义了指针变量&#xff0c;但是没有为指针分配内存&#xff0c;即指针没有指向一块合法的内存。这里举几个比较隐蔽的例子。 结构体成员指针未初始化&#xff1b;没有为结构体指针分配足够的内存&#xff1b;函数的…...

推荐的Kubernetes 学习资料

官方文档&#xff1a; Kubernetes 官方文档&#xff1a;https://kubernetes.io/docs/Kubernetes 教程&#xff1a;https://kubernetes.io/docs/tutorials/ 书籍&#xff1a; Kubernetes in Action&#xff0c;Marko Luksa 著Kubernetes Up and Running&#xff0c;Kelsey Hi…...

MySQL之索引与事务

一 索引的概念 一种帮助系统查找信息的数据 数据库索引 是一个排序的列表&#xff0c;存储着索引值和这个值所对应的物理地址无须对整个表进行扫描&#xff0c;通过物理地 址就可以找到所需数据是表中一列或者若干列值排序的方法 需要额外的磁盘空间 索引的作用 1 数据库…...

Linux的基本使用

1.Linux的背景 1.1什么Linux Linux是⼀个操作系统.和Windows是"并列"的关系. 1.2Linux系统的优势 1. 开源(意味着免费,便宜) 2. 稳定(Linux可以运⾏很多年,都不会发⽣重⼤问题) 3. 安全(Linux只有管理员或者特定⽤⼾才能访问Linux内核) 4. ⾃由(不会被强加商业产品和…...

亚信安慧AntDB全景观察:数据库领域的创新者

随着大数据时代的到来&#xff0c;对数据库的需求愈发强烈。在这一背景下&#xff0c;国产数据库逐渐崭露头角&#xff0c;亚信安慧AntDB作为重要的代表产品之一正积极参与到激烈的市场竞争中。亚信安慧AntDB不仅追求技术的革新和突破&#xff0c;同时也致力于满足用户日益增长…...

Linux 系统是如何收发⽹络包的

Linux 系统是如何收发⽹络包的&#xff1f; ⽹络模型 为了使得多种设备能通过⽹络相互通信&#xff0c;和为了解决各种不同设备在⽹络互联中的兼容性问题&#xff0c;国际标准化组织制定了开放式系统互联通信参考模型&#xff08;Open System Interconnection Reference Mode…...

飞跃前端瓶颈:技术进阶指南精华篇

引言&#xff1a; 在互联网的快车道上&#xff0c;前端技术日新月异。对于前端工程师而言&#xff0c;技术水平达到一定高度后&#xff0c;往往会遭遇成长的天花板。本文将探讨如何识别并突破这些技术瓶颈&#xff0c;分享实用的进阶策略和实践案例。 一、技术等级概览&#xf…...

简明教程:实现OpenCLaw轻量级应用服务器部署及Ollama大模型本地化蓉

智能体时代的代码范式转移与 C# 的战略转型 传统的 C# 开发模式&#xff0c;即所谓的“工程导向型”开发&#xff0c;要求开发者创建一个复杂的项目结构&#xff0c;包括项目文件&#xff08;.csproj&#xff09;、解决方案文件&#xff08;.sln&#xff09;、属性设置以及依赖…...

WinClaw安全实战 02|五层纵深防护体系全解析:从原理到实操,打造零风险AI智能体

摘要:2026年AI智能体爆发式普及,OpenClaw以27.3万GitHub星标成为现象级工具,但恶意Skill投毒、提示词注入、数据外泄等安全事故频发,国家互联网应急中心、工信部等多部门接连发布风险警示。威努特基于国家关键信息基础设施安全防护经验,打造WinClaw安全版AI智能体,其核心…...

为什么你的微调效果总差2个点?——大模型清洗中被低估的语义重复剔除术

第一章&#xff1a;大模型工程化中的数据去重与清洗 2026奇点智能技术大会(https://ml-summit.org) 数据质量是大模型性能的底层基石。未经治理的原始语料库往往包含大量重复样本、低信息熵文本、噪声片段及跨文档镜像内容&#xff0c;直接训练将导致模型收敛缓慢、记忆偏差放…...

Harness 中的事件溯源:以事件日志重建状态

Harness 中的事件溯源&#xff1a;以事件日志重建全链路 DevOps 状态 引言 痛点引入 作为全链路 DevOps 平台&#xff0c;Harness 每天会处理 数百万到数千万级别的用户/系统操作&#xff1a;开发者点击“启动流水线”、Feature Flag 规则引擎执行批量开关切换、云成本扫描器…...

终极UI组件矩阵完全指南:从Checkbox到Combobox的全方位解析

终极UI组件矩阵完全指南&#xff1a;从Checkbox到Combobox的全方位解析 【免费下载链接】open-ui Maintain an open standard for UI and promote its adherence and adoption. 项目地址: https://gitcode.com/gh_mirrors/op/open-ui Open UI项目致力于维护开放的UI标准…...

RelayModule:嵌入式继电器面向对象驱动库

1. RelayModule 库深度解析&#xff1a;面向嵌入式系统的数字继电器模块面向对象驱动设计继电器是嵌入式系统中实现强电控制与弱电隔离的核心执行器件&#xff0c;广泛应用于工业自动化、智能家居、电源管理及测试设备等场景。传统继电器驱动多采用裸机 GPIO 直接控制&#xff…...

别再把“AI 记忆”理解成向量库了MemPalace 源码级架构深拆

引言 很多人一提到“AI 记忆系统”&#xff0c;第一反应就是&#xff1a;把历史对话存进向量库&#xff0c;等需要的时候再检索出来。 这个思路当然没错&#xff0c;但它只碰到了问题表面。 当我真正把 MemPalace 的核心源码一路读下来之后&#xff0c;我越来越强烈地意识到&am…...

**发散创新:用Python构建高可扩展的BI分析流水线——从数据清洗到可视化全流程实战**在现代企业数字化转型中,**商业

发散创新&#xff1a;用Python构建高可扩展的BI分析流水线——从数据清洗到可视化全流程实战 在现代企业数字化转型中&#xff0c;商业智能&#xff08;BI&#xff09;分析已成为决策的核心驱动力。传统的BI工具如Power BI、Tableau虽然强大&#xff0c;但在定制化、自动化和实…...

LangGraph实战:用通义千问Qwen-Turbo打造一个能查工行保险的Agent(附完整代码)

LangGraph实战&#xff1a;用通义千问Qwen-Turbo构建银行保险查询Agent全流程指南 在金融科技快速发展的今天&#xff0c;AI Agent技术正在重塑银行保险服务的交互方式。想象一下&#xff0c;当客户需要查询特定保险产品时&#xff0c;不再需要翻阅冗长的文档或等待人工客服&am…...

代码之外周刊(第期):当技术让一切趋同,我们还剩什么?儇

1. 前言 本文详细介绍如何使用 kylin v10 iso 文件构建出 docker image&#xff0c;docker 版本为 20.10.7。 2. 构建 yum 离线源 2.1. 挂载 ISO 文件 mount Kylin-Server-V10-GFB-Release-030-ARM64.iso /media 2.2. 添加离线 repo 文件 在/etc/yum.repos.d/下创建kylin…...