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双主复制的配置实例一:172.25.0.19:实例二:172.25.0.20: 配置复制用户在实例 1 (172.25.0.19)上执行:在实例 2 (172.25.0.20)上执行&…...
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】步骤和流程,那如何在vscode编译器中使用deepseek,记录下来,方便备查。 第一步、安装插件 在…...
不同规模企业如何精准选择AI工具: DeepSeek、Grok 和 ChatGPT 三款主流 AI 工具深度剖析与对比
本文深入探讨了最近国内外主流的 DeepSeek、Grok 和 ChatGPT 三款主流 AI 工具的技术细节、性能表现、应用场景及局限性,并从技术能力、功能需求、成本预算、数据安全和合规以及服务与支持五个关键维度,详细分析了不同规模企业在选择 AI 工具时的考量因素…...
如何有效判断与排查Java GC问题
目录 一、GC的重要性与对性能的影响 (一)GC对性能的影响简要分析 1.GC暂停与应用停顿 2.GC吞吐量与资源利用率 3.GC对内存管理的作用:资源回收 4.GC策略与优化的选择 (二)GC的双刃剑 二、GC性能评价标准 &…...
【笔记】用大预言模型构建专家系统
最近闲庭漫步,赏一赏各个AI大语言模型芳容。也趁着时间,把倪海夏一家的天纪和人纪视频看完了,感谢倪先生和现在网络的知识分享,受益匪浅。但是发现看完,很多不错的知识都不能记录在脑子里,那用的时候岂不是…...
Android SystemUI深度定制实战:下拉状态栏集成响铃功能开关全解析
一、功能实现全景视图 目标场景:在Android 14系统级ROM定制中,为SystemUI下拉状态栏的QuickQSPanel区域新增响铃模式切换开关,实现静音/响铃快速切换功能。该功能需通过三层关键改造实现: 二、核心实现三部曲 1. 配置注入&…...
【Python】基础语法三
> 作者:დ旧言~ > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:了解Python的函数、列表和数组。 > 毒鸡汤:有些事情,总是不明白,所以我不会坚持。早安! > 专栏选自ÿ…...
[Computer Vision]实验六:视差估计
目录 一、实验内容 二、实验过程 2.1.1 test.py文件 2.1.2 test.py文件结果与分析 2.2.1 文件代码 2.2.2 结果与分析 一、实验内容 给定左右相机图片,估算图片的视差/深度;体现极线校正(例如打印前后极线对)、同名点匹配…...
【 开发知识点 一 】 随机数生成器 /dev/urandom 和 /dev/random
文章目录 一、随机数生成器 是什么 ?二、为什么 需要 随机数生成器 ?三、随机数生成器 基本原理四、随机数生成器 三个输出接口五、随机生成器 应用1、简单应用2、项目应用一、随机数生成器 是什么 ? /dev/random 和 /dev/urandom 是 Linux 上的字符设备文件,它们是随机数…...
LabVIEW虚拟弗兰克赫兹实验仪
随着信息技术的飞速发展,虚拟仿真技术已经成为教学和研究中不可或缺的工具。开发了一种基于LabVIEW平台开发的虚拟弗兰克赫兹实验仪,该系统不仅能模拟实验操作,还能实时绘制数据图形,极大地丰富了物理实验的教学内容和方式。 …...
LLC谐振变换器恒压恒流双竞争闭环simulink仿真
1.模型简介 本仿真模型基于MATLAB/Simulink(版本MATLAB 2017Ra)软件。建议采用matlab2017 Ra及以上版本打开。(若需要其他版本可联系代为转换)针对全桥LLC拓扑,利用Matlab软件搭建模型,分别对轻载…...
TVbox蜂蜜影视:智能电视观影新选择,简洁界面与强大功能兼具
蜂蜜影视是一款基于猫影视开源项目 CatVodTVJarLoader 开发的智能电视软件,专为追求简洁与高效观影体验的用户设计。该软件从零开始编写,界面清爽,操作流畅,特别适合在智能电视上使用。其最大的亮点在于能够自动跳过失效的播放地址…...
Python 绘制迷宫游戏,自带最优解路线
1、需要安装pygame 2、上下左右移动,空格实现物体所在位置到终点的路线,会有虚线绘制。 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(基础) 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——文化基因之文化融合
文明长河中的生命浪花 在洛阳白马寺的银杏树下,年轻母亲指着"农禅并重"碑刻给孩子讲述祖辈耕作的故事;在哔哩哔哩的直播间里,00后女孩穿着汉服跳起街舞,弹幕飘过"这才是文化缝合怪"。当文明交融的宏大叙事照…...
Hadoop简介
1. Hadoop简介 官网:http://hadoop.apache.org 1.1 Hadoop架构 Hadoop由三个模块组成:分布式存储HDFS、分布式计算MapReduce、资源调度引擎YARN 1.2 Hadoop历史 Hadoop作者Doug Cutting Apache Lucene是一个文本搜索系统库 Apache Nutch作为前者的一部…...
密码学(哈希函数)
4.1 Hash函数与数据完整性 数据完整性: 检测传输消息(加密或未加密)的修改。 密码学Hash函数: 构建某些数据的简短“指纹”;如果数据被篡改,则该指纹(以高概率)不再有效。Hash函数…...
谈谈单例模式中通过Htools包的SpringUtil.getBean获取Bean的好处
目录 优势 解决依赖注入失效问题: 典型应用场景: 好处 1. 实例化时序问题 2. 延迟获取解决空指针 3. 设计模式与 Spring 的权衡 代码对比:错误 vs 正确 错误示例(空指针): 正确实现(延…...
多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
