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

C++ 中 vector 的常用功能介绍

在 C++ 中,vector 是一种常用的动态数组容器,提供了方便的自动扩展、内存管理以及各种便捷的操作方法。它是 C++ 标准模板库(STL)的一部分,适用于需要动态存储和管理大量元素的场景。

在本文中,我们将简要介绍 vector 的常用功能,展示如何对其进行操作和排序。为了简洁起见,假设我们已经使用了 using namespace std;

1. 创建与初始化

要创建一个 vector,可以直接通过以下几种方式初始化:

vector<int> vec1;             // 空的 vector
vector<int> vec2(10);         // 创建一个大小为 10 的 vector,所有元素默认初始化为 0
vector<int> vec3(5, 2);       // 创建一个大小为 5 的 vector,所有元素初始化为 2
vector<int> vec4 = {1, 2, 3}; // 通过初始化列表创建 vector

vector 支持存储几乎所有类型的数据,只需要在声明时指定类型。

2. 添加与访问元素

vector 提供了几种方法来添加和访问元素:

  • push_back(): 在 vector 的末尾添加一个元素。
  • emplace_back(): 在末尾原地构造元素,避免不必要的拷贝。
  • [] 运算符: 使用下标访问元素。
  • at(): 安全访问元素,会进行边界检查。

示例:

vector<int> vec = {1, 2, 3};
vec.push_back(4);  // 添加元素 4 到末尾
cout << vec[0];    // 输出第一个元素,结果为 1
cout << vec.at(2); // 输出第三个元素,结果为 3

需要注意的是,[] 不进行范围检查,如果访问越界会导致未定义行为,而 at() 会抛出异常。

3. 获取大小与容量

vector 提供了几个常用函数来获取其大小、容量以及判断是否为空:

  • size(): 返回当前元素的个数。
  • capacity(): 返回当前 vector 容量,表示在不重新分配内存的情况下,最多可以存储的元素个数。
  • empty(): 判断 vector 是否为空。

示例:

cout << "Size: " << vec.size();        // 输出当前元素个数
cout << "Capacity: " << vec.capacity(); // 输出当前容量
cout << (vec.empty() ? "Empty" : "Not Empty"); // 判断是否为空
4. 删除元素

vector 提供了几种方法来删除元素:

  • pop_back(): 删除 vector 末尾的元素。
  • erase(): 删除指定位置或范围的元素。
  • clear(): 清空 vector 中的所有元素,但保留容量。

示例:

vector<int> vec = {1, 2, 3, 4, 5};
vec.pop_back();         // 删除最后一个元素,vec 变成 {1, 2, 3, 4}
vec.erase(vec.begin()); // 删除第一个元素,vec 变成 {2, 3, 4}
vec.clear();            // 清空所有元素,但容量不变
5. 排序 vector

在 C++ 中,vector 可以通过标准库中的 sort 函数来进行排序。默认情况下,sort 按照升序排序,也可以自定义排序规则。

  • 默认升序排序: 只需传入 vector 的开始和结束迭代器。
  • 自定义排序: 可以通过传入一个比较函数或函数对象来自定义排序规则,如降序排序。

升序排序示例

#include <algorithm> // 引入排序所需的头文件vector<int> vec = {5, 2, 9, 1, 5, 6};
sort(vec.begin(), vec.end());  // 默认按升序排序for (const auto& val : vec) {cout << val << " ";  // 输出: 1 2 5 5 6 9
}

降序排序示例

sort(vec.begin(), vec.end(), greater<int>());  // 使用 greater<int>() 实现降序排序for (const auto& val : vec) {cout << val << " ";  // 输出: 9 6 5 5 2 1
}

相关文章:

C++ 中 vector 的常用功能介绍

在 C 中&#xff0c;vector 是一种常用的动态数组容器&#xff0c;提供了方便的自动扩展、内存管理以及各种便捷的操作方法。它是 C 标准模板库&#xff08;STL&#xff09;的一部分&#xff0c;适用于需要动态存储和管理大量元素的场景。 在本文中&#xff0c;我们将简要介绍…...

[QT] QT事件与事件重写

一.事件 事件(event)是由系统或者 Qt本身在不同的场景下发出的。当用户按下鼠标、敲下键盘&#xff0c;或者是窗口关闭等都会发出一个相应的事件。 一些事件在用户操作时发出(如鼠标/键盘事件); 另一些事件则是由系统自动发出(如计时器事件)。 Qt窗口中对于产生的一系列事件都…...

c# 视觉识别图片文字 二维码

1.二维码识别 插件 ZXing.Net using System; using System.Drawing; // 如果你使用的是System.Drawing.Common using ZXing;class Program {static void Main(){string imagePath "path_to_your_qr_code_image.png";var barcodeBitmap (Bitmap)Image.FromFile(im…...

UEFI——访问PCI/PCIE设备(二)

一、支持访问PCI/PCIE设备的Protocol UEFI中提供了两个主要的模块来支持PCI总线&#xff0c;一是PCI Host Bridge&#xff08;PCI主桥&#xff09;控制器驱动&#xff0c;另一个是PCI总线驱动。这两个模块是和特定的平台硬件绑定的&#xff0c;在这种机制下&#xff0c;屏蔽了…...

决策树算法的介绍与应用

目录 引言 决策树算法的基本原理 表格总结&#xff1a;决策树的构建步骤 决策树算法的 MATLAB 实现 示例&#xff1a;使用决策树进行分类预测 决策树的应用场景 表格总结&#xff1a;决策树的主要应用领域 决策树的优势与局限 结论 引言 决策树是一种广泛应用于数据挖掘…...

杰发科技Bootloader(3)—— 基于7801的APP切到Boot

为了方便在APP中跳转到Boot重新进行升级&#xff0c;有两种办法&#xff0c;7840同样可以使用。 1. 调用reset接口进行复位&#xff0c;复位后会先进Boot&#xff0c;再自动跳转到App。 NVIC_SystemReset(); 2. 直接使用跳转指令&#xff0c;参考Boot跳转到App代码&#xff0…...

Leetcode面试经典150题-138.随机链表的复制

题目比较简单&#xff0c;重点是理解思想&#xff0c;random不管&#xff0c;copy一定要放在next 而且里面的遍历过程不能省略 解法都在代码里&#xff0c;不懂就留言或者私信 /* // Definition for a Node. class Node {int val;Node next;Node random;public Node(int val…...

freemarker模板学习笔记

文章目录 freemarker常用指令if-elseif-else指令switch, case, default, break指令list, else, items, sep, break 指令<#list>指令语法<#else> 指令<#items> 指令<#sep> 指令<#break> 指令 include 指令<#include> 基础知识<#include&…...

高亚科技与广东海悟携手,打造全流程电子竞标管理平台!

近日&#xff0c;中国企业管理软件资深服务商高亚科技与广东海悟科技有限公司&#xff08;以下简称“海悟”&#xff09;正式签署合作协议&#xff0c;双方将基于高亚科技的8Manage SRM系统&#xff0c;推进海悟采购管理的数字化升级&#xff0c;实现全流程在线电子竞标管理&am…...

240908-结合DBGPT与Ollama实现RAG本地知识检索增强

A. 最终效果 B. 背景说明 DBGPT在0.5.6版本中开始支持Ollama&#xff1a;v0.5.6 版本更新 网友对其Web端及界面端的设置进行了分享&#xff1a; feat(model): support ollama as an optional llm & embedding proxy by GITHUBear Pull Request #1475 eosphoros-ai/DB-G…...

AMD ThinkSystem服务器上的 Linux 和 C 状态设置 - Lenovo ThinkSystem

受影响的配置 该系统可以是以下任何Lenovo服务器&#xff1a; ThinkSystem 、SR645&#xff08; ThinkSystem &#xff09;ThinkSystem &#xff0c;SR645 V3&#xff08; ThinkSystem &#xff09;ThinkSystem &#xff0c;SR635 V3&#xff08; ThinkSystem &#xff09;Th…...

Redis过期删除和缓存淘汰

1. 过期删除 在 Redis 中&#xff0c;键的过期删除机制主要包括惰性删除&#xff08;Lazy Deletion&#xff09;和定期删除&#xff08;Periodic Deletion&#xff09;。这两种策略有各自的优缺点&#xff0c;Redis 最终会结合这两种方法来管理过期键。 1.1 惰性删除&#xf…...

Golang | Leetcode Golang题解之第401题二进制手表

题目&#xff1a; 题解&#xff1a; func readBinaryWatch(turnedOn int) (ans []string) {for i : 0; i < 1024; i {h, m : i>>6, i&63 // 用位运算取出高 4 位和低 6 位if h < 12 && m < 60 && bits.OnesCount(uint(i)) turnedOn {ans …...

TON智能合约stdlib_ext库:扩展功能一览

TON&#xff08;TheOpenNetwork&#xff09;作为一个去中心化的区块链平台&#xff0c;其智能合约功能强大而灵活。在TON智能合约的开发过程中&#xff0c;stdlib.fc库提供了基础的功能支持。然而&#xff0c;对于一些高级或特定的需求&#xff0c;stdlib.fc可能无法满足。为此…...

LabVIEW开发FPGA方法与FIFO数据丢失处理

开发基于NI 7975R FPGA的系统涉及一系列流程&#xff0c;包括驱动安装、LabVIEW项目设置、开发调试、编译和与Windows系统的通信。重点在于FIFO的正确配置&#xff0c;避免数据丢失是关键环节之一&#xff0c;尤其是在使用高速数据流传输时。以下将详细介绍这些过程&#xff0c…...

Python中的内存池机制

在Python中&#xff0c;内存管理是一个复杂但至关重要的主题&#xff0c;它直接关系到程序的性能和稳定性。Python的内存管理机制包括对象的分配、追踪以及回收&#xff0c;其中内存池&#xff08;Memory Pool&#xff09;是这一机制中的一个重要组成部分。内存池机制通过预先分…...

智能家居系统(基于STM32F103C8T6标准库+FreeRTOS+Qt串口开发实现)

视频演示&#xff1a;基于STM32F103C8T6标准库FreeRTOSQt串口开发实现的智能家居项目_哔哩哔哩_bilibili 基于STM32F103C8T6标准库FreeRTOSQt串口开发实现的智能家居项目: https://pan.baidu.com/s/1f41gAfOOnlcQoKoMx3o84A?pwd6j2g 提取码: 6j2g 注&#xff1a;本项目为学习完…...

[数据集][目标检测]脊椎检测数据集VOC+YOLO格式1137张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;1137 标注数量(xml文件个数)&#xff1a;1137 标注数量(txt文件个数)&#xff1a;1137 标注…...

大受欢迎的游戏却又意外被作者下架的《Flappy Bird》将重返iPhone

据"Flappy Bird 基金会"官网称&#xff0c;标志性的侧卷轴滚动游戏《Flappy Bird》将很快回归 iPhone。《Flappy Bird》于 2013 年发布&#xff0c;很快就获得了数千万次下载。然而&#xff0c;这款游戏在2014 年突然从 App Store 下架&#xff0c;原因是其越南开发者…...

Flutter类

Dart中的对象都继承自 Object 类&#xff0c;单继承&#xff08;extend关键字&#xff09;。Dart与Java、kotlin不同的是其无public、private、protected修饰符&#xff0c;默认public &#xff0c;通过在属性名、方法名前加 _下划线 来定义是否私有。 实现一个简单的类 class…...

从微信聊天到在线游戏:聊聊UDP和TCP在你手机App里的那些‘小心思’

从微信聊天到在线游戏&#xff1a;聊聊UDP和TCP在你手机App里的那些‘小心思’ 每天我们都在用手机App聊天、打游戏、看视频&#xff0c;但很少有人注意到这些应用背后隐藏的网络协议选择。为什么微信文字消息总能准确送达&#xff0c;而语音通话偶尔会断断续续&#xff1f;为…...

薛定谔共价对接实战:如何为你的靶点蛋白快速找到‘锁死’它的共价抑制剂?

薛定谔共价对接实战&#xff1a;靶点蛋白的共价抑制剂高效筛选策略 药物研发领域正经历一场静默革命——共价抑制剂从曾经的"危险分子"摇身变为现代药物设计的明星。与传统可逆抑制剂不同&#xff0c;共价抑制剂能与靶点蛋白形成稳定的共价键&#xff0c;实现近乎不可…...

使用 C++ 模拟 ShaderLanguage 的 swizzle

经常编写着色器的同学应该对 swizzle&#xff08;重排&#xff09;语法非常熟悉&#xff0c;方便又灵活&#xff0c;可以说是用过一次便回味无穷。 代码 vec4 color vec4(1.0, 0.5, 0.0, 1.0); vec3 rgb color.rgb; // { 1.0, 0.5, 0.0 } vec2 xy color.xy; …...

IDEA全局替换不够用?试试这个Java脚本,精准处理多模块项目文件内容替换

IDEA全局替换不够用&#xff1f;试试这个Java脚本&#xff0c;精准处理多模块项目文件内容替换 在大型Java项目中&#xff0c;我们经常需要批量修改代码中的某些字符串或配置。虽然IntelliJ IDEA提供了"Replace in Path"功能&#xff0c;但在实际企业级开发中&#…...

10G以太网Subsystem避坑指南:复位敏感性与时钟配置的实战经验

10G以太网Subsystem避坑指南&#xff1a;复位敏感性与时钟配置的实战经验 在高速网络设备开发中&#xff0c;10G以太网Subsystem的稳定性直接决定了系统性能上限。经历过三次产品迭代后&#xff0c;我发现80%的链路故障都可追溯到复位时序和时钟配置问题——这两个看似基础的环…...

BiLSTM时间序列预测实战:用Python搞定股票价格预测(附完整代码)

BiLSTM金融时间序列预测&#xff1a;从理论到实战的Python完整指南 金融市场如同汹涌的海浪&#xff0c;价格波动背后隐藏着无数投资者的决策与情绪。对于量化分析师和算法交易者而言&#xff0c;准确预测这些波动意味着巨大的商业价值。传统的时间序列分析方法如ARIMA在面对非…...

如何借助内网穿透工具实现WinSCP跨系统远程文件管理的稳定连接

1. 为什么需要内网穿透实现WinSCP远程文件管理 作为开发者或运维人员&#xff0c;我经常需要在Windows和Linux服务器之间传输文件。最初我尝试用U盘或网盘中转&#xff0c;但效率太低&#xff1b;后来改用WinSCP直连局域网&#xff0c;又遇到跨地域办公的难题。直到发现内网穿透…...

双目视觉实战:从标定参数到深度图的完整OpenCV实现指南

双目视觉实战&#xff1a;从标定参数到深度图的完整OpenCV实现指南 在计算机视觉领域&#xff0c;双目立体视觉一直是获取三维环境信息的重要技术手段。与激光雷达等主动传感器相比&#xff0c;基于双相机的立体视觉系统具有成本低、数据丰富、易于部署等优势。本文将深入探讨如…...

手把手教你用Wireshark抓包分析Opener EIP通信,快速定位ForwardOpen失败原因

深度解析EtherNet/IP通信&#xff1a;用Wireshark诊断ForwardOpen失败的实战指南 当你在MCU上成功移植了Opener协议栈&#xff0c;TCP连接建立正常&#xff0c;却在关键时刻遭遇ForwardOpen失败时&#xff0c;那种挫败感我深有体会。去年在汽车生产线控制系统项目中&#xff0c…...

开源视频下载工具downkyi:高效管理B站资源的全流程指南

开源视频下载工具downkyi&#xff1a;高效管理B站资源的全流程指南 【免费下载链接】downkyi 哔哩下载姬downkyi&#xff0c;哔哩哔哩网站视频下载工具&#xff0c;支持批量下载&#xff0c;支持8K、HDR、杜比视界&#xff0c;提供工具箱&#xff08;音视频提取、去水印等&…...