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

C++ 标准库容器的常用成员函数

目录

C++ 标准库容器简介

通用成员函数

1. 大小相关

size()

empty()

max_size()

2. 元素访问

operator[]

at(size_t n)

front()

back()

3. 修改容器

push_back(const T& value)

pop_back()

clear()

insert()

erase()

4. 迭代器相关

begin()

end()

rbegin() 和 rend()

std::vector 的特有成员函数 

1. capacity()

2. reserve(size_t n)

3. resize(size_t n)

4. shrink_to_fit()(C++11 起)

其他容器的特有函数(简单介绍)

std::list:

std::map:

std::set:

C++ 标准库提供了多种容器(如 std::vector、std::list、std::map 等),这些容器都有一些通用的成员函数,也有一些特定于容器类型的函数。

C++ 标准库容器简介

C++ 标准库容器在 <vector>、<list>、<map> 等头文件中定义,属于 STL(标准模板库)的一部分。常见的容器包括:

  • 顺序容器:std::vector(动态数组)、std::array(固定数组)、std::list(双向链表)、std::deque(双端队列)。

  • 关联容器:std::map(键值对映射)、std::set(唯一键集合)。

  • 无序容器:std::unordered_map、std::unordered_set(哈希表实现)。

每个容器都有一套成员函数,用于操作容器中的元素、管理大小和访问数据。

通用成员函数

大多数容器都支持以下通用成员函数(部分可能因容器类型略有差异):

1. 大小相关

  • size()
    • 返回容器当前元素个数。

    • 返回类型:size_t(无符号整数)。

    • 示例:

std::vector<int> vec = {1, 2, 3};
std::cout << vec.size();  // 输出 3
empty()
  • 检查容器是否为空。

  • 返回类型:bool(true 表示空)。

  • 示例:

std::vector<int> vec;
std::cout << vec.empty();  // 输出 1 (true)
vec.push_back(1);
std::cout << vec.empty();  // 输出 0 (false)
max_size()
  • 返回容器理论上能容纳的最大元素个数(受内存限制)。

  • 返回类型:size_t。

  • 示例:

std::vector<int> vec;
std::cout << vec.max_size();  // 输出很大数字(如 2³²-1 或 2⁶⁴-1)

2. 元素访问

  • operator[]
    • 通过索引访问元素(不检查越界)。

    • 返回类型:元素类型的引用(T&)。

    • 只适用于支持随机访问的容器(如 vector, deque)。

    • 示例:

std::vector<int> vec = {10, 20, 30};
std::cout << vec[1];  // 输出 20
vec[1] = 50;          // 修改为 50
at(size_t n)
  • 通过索引访问元素(带越界检查,抛出 std::out_of_range 异常)。

  • 返回类型:元素类型的引用(T&)。

  • 示例:
std::vector<int> vec = {10, 20};
std::cout << vec.at(1);  // 输出 20
// vec.at(5);  // 抛出异常:out of range
front()
  • 返回第一个元素的引用。

  • 示例:

std::vector<int> vec = {1, 2, 3};
std::cout << vec.front();  // 输出 1
back()
  • 返回最后一个元素的引用。

  • 示例:

std::vector<int> vec = {1, 2, 3};
std::cout << vec.back();  // 输出 3

3. 修改容器

  • push_back(const T& value)
    • 在容器末尾添加一个元素(vector, list, deque 支持)。

    • 示例:

std::vector<int> vec;
vec.push_back(42);  // vec = {42}
pop_back()
  • 删除最后一个元素(不返回)。

  • 示例:

std::vector<int> vec = {1, 2, 3};
vec.pop_back();  // vec = {1, 2}
clear()
  • 删除所有元素,使容器变空。

  • 示例:

std::vector<int> vec = {1, 2, 3};
vec.clear();  // vec 变空,size() == 0
insert()
  • 在指定位置插入元素(具体参数因容器不同)。

  • 示例(vector):

std::vector<int> vec = {1, 3};
vec.insert(vec.begin() + 1, 2);  // vec = {1, 2, 3}
erase()
  • 删除指定位置或范围的元素。

  • 示例:

std::vector<int> vec = {1, 2, 3};
vec.erase(vec.begin());  // vec = {2, 3}

4. 迭代器相关

  • begin()
    • 返回指向第一个元素的迭代器。

    • 示例:

std::vector<int> vec = {1, 2, 3};
auto it = vec.begin();  // it 指向 1
end()
  • 返回指向末尾后一位置的迭代器(不指向最后一个元素)。

  • 示例:

std::vector<int> vec = {1, 2, 3};
auto it = vec.end();  // 指向 3 之后的“哨兵”位置
rbegin() 和 rend()
  • 返回反向迭代器(从末尾向开头遍历)。

  • 示例:

std::vector<int> vec = {1, 2, 3};
auto rit = vec.rbegin();  // 指向 3

std::vector 的特有成员函数 

1. capacity()
  • 返回当前分配的内存容量(可能大于 size())。

  • 示例:

std::vector<int> vec;
vec.push_back(1);
std::cout << vec.capacity();  // 可能输出 1、2、4(实现依赖)
2. reserve(size_t n)
  • 预分配内存空间,避免频繁扩展。

  • 示例:

std::vector<int> vec;
vec.reserve(10);  // 预留空间给 10 个元素
vec.push_back(1);  // 不会重新分配内存
3. resize(size_t n)
  • 调整容器大小,多余元素删除,缺少元素用默认值填充。

  • 示例:

std::vector<int> vec = {1, 2};
vec.resize(4);  // vec = {1, 2, 0, 0}
vec.resize(1);  // vec = {1}
4. shrink_to_fit()(C++11 起)
  • 缩小容量以匹配当前大小(非强制,可能无效)。

  • 示例:

std::vector<int> vec(100);  // 容量 >= 100
vec.resize(10);
vec.shrink_to_fit();  // 试图将容量缩小到 10

其他容器的特有函数(简单介绍)

  • std::list:
    • push_front():在头部添加元素。

    • pop_front():删除头部元素。

  • std::map:
    • find(key):查找键对应的元素。

    • insert({key, value}):插入键值对。

  • std::set:
    • count(value):检查值是否存在(返回 0 或 1)。

相关文章:

C++ 标准库容器的常用成员函数

目录 C 标准库容器简介 通用成员函数 1. 大小相关 size() empty() max_size() 2. 元素访问 operator[] at(size_t n) front() back() 3. 修改容器 push_back(const T& value) pop_back() clear() insert() erase() 4. 迭代器相关 begin() end() rbegi…...

MySQL双主搭建-5.7.35

文章目录 上传并安装MySQL 5.7.35双主复制的配置实例一&#xff1a;172.25.0.19&#xff1a;实例二&#xff1a;172.25.0.20&#xff1a; 配置复制用户在实例 1 &#xff08;172.25.0.19&#xff09;上执行&#xff1a;在实例 2 &#xff08;172.25.0.20&#xff09;上执行&…...

Uniapp开发微信小程序插件的一些心得

一、uniapp 开发微信小程序框架搭建 1. 通过 vue-cli 创建 uni-ap // nodejs使用18以上的版本 nvm use 18.14.1 // 安装vue-cli npm install -g vue/cli4 // 选择默认模版 vue create -p dcloudio/uni-preset-vue plugindemo // 运行 uniapp2wxpack-cli npx uniapp2wxpack --…...

Vscode通过Roo Cline接入Deepseek

文章目录 背景第一步、安装插件第二步、申请API key第三步、Vscode中配置第四步、Deepseek对话 背景 在前期介绍【IDEA通过Contince接入Deepseek】步骤和流程&#xff0c;那如何在vscode编译器中使用deepseek&#xff0c;记录下来&#xff0c;方便备查。 第一步、安装插件 在…...

不同规模企业如何精准选择AI工具: DeepSeek、Grok 和 ChatGPT 三款主流 AI 工具深度剖析与对比

本文深入探讨了最近国内外主流的 DeepSeek、Grok 和 ChatGPT 三款主流 AI 工具的技术细节、性能表现、应用场景及局限性&#xff0c;并从技术能力、功能需求、成本预算、数据安全和合规以及服务与支持五个关键维度&#xff0c;详细分析了不同规模企业在选择 AI 工具时的考量因素…...

如何有效判断与排查Java GC问题

目录 一、GC的重要性与对性能的影响 &#xff08;一&#xff09;GC对性能的影响简要分析 1.GC暂停与应用停顿 2.GC吞吐量与资源利用率 3.GC对内存管理的作用&#xff1a;资源回收 4.GC策略与优化的选择 &#xff08;二&#xff09;GC的双刃剑 二、GC性能评价标准 &…...

【笔记】用大预言模型构建专家系统

最近闲庭漫步&#xff0c;赏一赏各个AI大语言模型芳容。也趁着时间&#xff0c;把倪海夏一家的天纪和人纪视频看完了&#xff0c;感谢倪先生和现在网络的知识分享&#xff0c;受益匪浅。但是发现看完&#xff0c;很多不错的知识都不能记录在脑子里&#xff0c;那用的时候岂不是…...

Android SystemUI深度定制实战:下拉状态栏集成响铃功能开关全解析

一、功能实现全景视图 目标场景&#xff1a;在Android 14系统级ROM定制中&#xff0c;为SystemUI下拉状态栏的QuickQSPanel区域新增响铃模式切换开关&#xff0c;实现静音/响铃快速切换功能。该功能需通过三层关键改造实现&#xff1a; 二、核心实现三部曲 1. 配置注入&…...

【Python】基础语法三

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;了解Python的函数、列表和数组。 > 毒鸡汤&#xff1a;有些事情&#xff0c;总是不明白&#xff0c;所以我不会坚持。早安! > 专栏选自&#xff…...

[Computer Vision]实验六:视差估计

目录 一、实验内容 二、实验过程 2.1.1 test.py文件 2.1.2 test.py文件结果与分析 2.2.1 文件代码 2.2.2 结果与分析 一、实验内容 给定左右相机图片&#xff0c;估算图片的视差/深度&#xff1b;体现极线校正&#xff08;例如打印前后极线对&#xff09;、同名点匹配…...

【 开发知识点 一 】 随机数生成器 /dev/urandom 和 /dev/random

文章目录 一、随机数生成器 是什么 ?二、为什么 需要 随机数生成器 ?三、随机数生成器 基本原理四、随机数生成器 三个输出接口五、随机生成器 应用1、简单应用2、项目应用一、随机数生成器 是什么 ? /dev/random 和 /dev/urandom 是 Linux 上的字符设备文件,它们是随机数…...

LabVIEW虚拟弗兰克赫兹实验仪

随着信息技术的飞速发展&#xff0c;虚拟仿真技术已经成为教学和研究中不可或缺的工具。开发了一种基于LabVIEW平台开发的虚拟弗兰克赫兹实验仪&#xff0c;该系统不仅能模拟实验操作&#xff0c;还能实时绘制数据图形&#xff0c;极大地丰富了物理实验的教学内容和方式。 ​ …...

LLC谐振变换器恒压恒流双竞争闭环simulink仿真

1.模型简介 本仿真模型基于MATLAB/Simulink&#xff08;版本MATLAB 2017Ra&#xff09;软件。建议采用matlab2017 Ra及以上版本打开。&#xff08;若需要其他版本可联系代为转换&#xff09;针对全桥LLC拓扑&#xff0c;利用Matlab软件搭建模型&#xff0c;分别对轻载&#xf…...

TVbox蜂蜜影视:智能电视观影新选择,简洁界面与强大功能兼具

蜂蜜影视是一款基于猫影视开源项目 CatVodTVJarLoader 开发的智能电视软件&#xff0c;专为追求简洁与高效观影体验的用户设计。该软件从零开始编写&#xff0c;界面清爽&#xff0c;操作流畅&#xff0c;特别适合在智能电视上使用。其最大的亮点在于能够自动跳过失效的播放地址…...

Python 绘制迷宫游戏,自带最优解路线

1、需要安装pygame 2、上下左右移动&#xff0c;空格实现物体所在位置到终点的路线&#xff0c;会有虚线绘制。 import pygame import random import math# 迷宫单元格类 class Cell:def __init__(self, x, y):self.x xself.y yself.walls {top: True, right: True, botto…...

vue3学习-1(基础)

vue3学习-1&#xff08;基础&#xff09; 1. 开始API 风格选项式 API (Options API)组合式 API (Composition API) 快速创建个应用 2.基础1. 创建个应用2.模板语法3.响应式基础reactive() 的局限性[](https://cn.vuejs.org/guide/essentials/reactivity-fundamentals.html#limi…...

deepseek使用记录18——文化基因之文化融合

文明长河中的生命浪花 在洛阳白马寺的银杏树下&#xff0c;年轻母亲指着"农禅并重"碑刻给孩子讲述祖辈耕作的故事&#xff1b;在哔哩哔哩的直播间里&#xff0c;00后女孩穿着汉服跳起街舞&#xff0c;弹幕飘过"这才是文化缝合怪"。当文明交融的宏大叙事照…...

Hadoop简介

1. Hadoop简介 官网&#xff1a;http://hadoop.apache.org 1.1 Hadoop架构 Hadoop由三个模块组成&#xff1a;分布式存储HDFS、分布式计算MapReduce、资源调度引擎YARN 1.2 Hadoop历史 Hadoop作者Doug Cutting Apache Lucene是一个文本搜索系统库 Apache Nutch作为前者的一部…...

密码学(哈希函数)

4.1 Hash函数与数据完整性 数据完整性&#xff1a; 检测传输消息&#xff08;加密或未加密&#xff09;的修改。 密码学Hash函数&#xff1a; 构建某些数据的简短“指纹”&#xff1b;如果数据被篡改&#xff0c;则该指纹&#xff08;以高概率&#xff09;不再有效。Hash函数…...

谈谈单例模式中通过Htools包的SpringUtil.getBean获取Bean的好处

目录 优势 解决依赖注入失效问题&#xff1a; 典型应用场景&#xff1a; 好处 1. 实例化时序问题 2. 延迟获取解决空指针 3. 设计模式与 Spring 的权衡 代码对比&#xff1a;错误 vs 正确 错误示例&#xff08;空指针&#xff09;&#xff1a; 正确实现&#xff08;延…...

探索NextDNS Config:优化你的DNS配置以提升网络性能

探索NextDNS Config&#xff1a;优化你的DNS配置以提升网络性能 是一个开源项目&#xff0c;旨在帮助用户轻松地管理并优化其设备上的NextDNS设置。该项目由Yokoffing开发&#xff0c;并提供了多种平台&#xff08;包括路由器、Android和iOS&#xff09;的配置文件&#xff0c;…...

pygcn终极指南:解决图神经网络开发者最常遇到的10个核心问题

pygcn终极指南&#xff1a;解决图神经网络开发者最常遇到的10个核心问题 【免费下载链接】pygcn Graph Convolutional Networks in PyTorch 项目地址: https://gitcode.com/gh_mirrors/py/pygcn pygcn是一个基于PyTorch实现的图卷积网络&#xff08;GCN&#xff09;框架…...

SearXNG 高级部署方案:自带反向代理的专家级配置

SearXNG 高级部署方案&#xff1a;自带反向代理的专家级配置 【免费下载链接】searxng-docker The docker-compose files for setting up a SearXNG instance with docker. 项目地址: https://gitcode.com/gh_mirrors/se/searxng-docker 想要快速搭建一个安全、隐私保护…...

嵌入式系统XIP技术:原理、实现与优化

1. XIP技术核心概念解析eXecute In Place&#xff08;XIP&#xff09;技术是现代嵌入式系统中的一项关键创新。简单来说&#xff0c;它允许CPU直接从非易失性存储器&#xff08;如NOR Flash&#xff09;中读取并执行代码&#xff0c;而无需先将代码复制到RAM中。这种技术最早应…...

探索高压柔性输电系统中6脉冲与12脉冲晶闸管控制HVDC仿真模型

高压柔性输电系统6脉冲&#xff0c;12脉冲晶闸管控制HVDC的仿真模型&#xff0c;说明文档在电力传输领域&#xff0c;高压柔性输电系统&#xff08;HVDC&#xff09;以其高效、灵活等特性占据着重要地位。其中&#xff0c;6脉冲和12脉冲晶闸管控制的HVDC仿真模型更是关键部分&a…...

探索PLECS仿真下DAB变换器峰值电流前馈控制策略——IEEE顶刊复现之旅

PLECS仿真&#xff0c;IEEE顶刊复现&#xff0c;DAB变换器峰值电流前馈控制策略。最近在电力电子领域的研究中&#xff0c;我深入钻研了DAB&#xff08;Dual - Active - Bridge&#xff09;变换器的相关控制策略&#xff0c;并通过PLECS仿真实现了IEEE顶刊论文里一种峰值电流前…...

AI编码狂飙,安全防线告急:运行时测试如何守住软件安全的生死线

2026年初&#xff0c;国内某头部电商平台爆发大规模用户数据泄露事件&#xff0c;溯源结果震惊整个行业&#xff1a;事件根源并非黑客的0day漏洞攻击&#xff0c;而是开发团队通过AI编码工具生成的一段会员权限校验代码。这段代码在语法层面完全合规&#xff0c;静态安全扫描全…...

产品经理、设计师必看:2026年6款AI界面生成工具实测,哪个最值得用?

过去&#xff0c;一款移动应用从需求文档到可交付原型&#xff0c;至少需要设计师投入 1~2 周时间。而今&#xff0c;借助 AI 界面生成工具&#xff0c;同样的工作可以压缩到几小时甚至几十分钟完成。目前AI界面生成工具正在重塑产品团队的工作方式。本文实测对比了 UXbot、Uiz…...

Facebook Instant Game变现全攻略:如何通过广告和内购让你的HTML5游戏赚钱

Facebook Instant Game变现全攻略&#xff1a;如何通过广告和内购让你的HTML5游戏赚钱 在HTML5游戏开发领域&#xff0c;Facebook Instant Game已经成为不可忽视的平台。这个无需下载、即点即玩的游戏生态系统&#xff0c;为开发者提供了独特的变现机会。不同于传统应用商店30%…...

【CentOS】sshd服务启动失败全攻略:从权限修复到目录缺失的完整解决方案

1. 当sshd服务罢工时&#xff0c;我们该从哪里入手&#xff1f; 每次遇到sshd服务启动失败&#xff0c;就像面对一台突然熄火的汽车——你明明记得昨天还好好的&#xff0c;今天却怎么都打不着火。作为运维人员&#xff0c;这种情况再熟悉不过了。最近我就遇到一个典型案例&…...