当前位置: 首页 > 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;延…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO&#xff1a;支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题&#xff1a;MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者&#xff1a;Yanyuan Chen, Dexuan Xu, Yu Hu…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

LRU 缓存机制详解与实现(Java版) + 力扣解决

&#x1f4cc; LRU 缓存机制详解与实现&#xff08;Java版&#xff09; 一、&#x1f4d6; 问题背景 在日常开发中&#xff0c;我们经常会使用 缓存&#xff08;Cache&#xff09; 来提升性能。但由于内存有限&#xff0c;缓存不可能无限增长&#xff0c;于是需要策略决定&am…...

实战三:开发网页端界面完成黑白视频转为彩色视频

​一、需求描述 设计一个简单的视频上色应用&#xff0c;用户可以通过网页界面上传黑白视频&#xff0c;系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观&#xff0c;不需要了解技术细节。 效果图 ​二、实现思路 总体思路&#xff1a; 用户通过Gradio界面上…...

水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关

在水泥厂的生产流程中&#xff0c;工业自动化网关起着至关重要的作用&#xff0c;尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关&#xff0c;为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多&#xff0c;其中不少设备采用Devicenet协议。Devicen…...