news 2026/2/5 2:11:47

6.STL 容器常用操作速查表

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
6.STL 容器常用操作速查表

STL容器常用操作速查表

操作类型

std::vector(动态数组)

std::string(字符串)

std::map<K,V>(有序键值对)

头文件

#include <vector>

#include <string>

#include <map>

创建容器

std::vector<int> vec;(空容器)
std::vector<int> vec{1,2,3};(初始化)

std::string str;(空字符串)
std::string str = "hello";(初始化)

std::map<int, std::string> mp;(空容器)
std::map<int, std::string> mp{{1,"a"},{2,"b"}};(初始化)

添加元素

1. 尾部添加:vec.push_back(10);
2. 指定位置插入:vec.insert(vec.begin()+1, 20);(在第2位插20)

1. 拼接:str += " world";
2. 插入字符:str.insert(2, "xx");(在第3位插xx)
3. 追加字符:str.push_back('!');

1. 直接赋值:mp[101] = "张三";
2. 插入键值对:mp.insert({102, "李四"});(不覆盖已有键)

访问元素

1. 下标访问:vec[0](无越界检查)
2. 安全访问:vec.at(0)(有越界检查)
3. 首尾元素:vec.front()/vec.back()

1. 下标访问:str[0]
2. 安全访问:str.at(0)
3. 首尾字符:str.front()/str.back()

1. 下标访问:mp[101](无键则创建默认值)
2. 查找访问:auto it = mp.find(101); if(it != mp.end()) { it->second; }(推荐,无键不创建)

修改元素

vec[0] = 99;(直接赋值)

str[0] = 'H';(修改字符)
str.replace(0, 2, "HE");(替换子串)

mp[101] = "张三丰";(覆盖已有值)

删除元素

1. 尾部删除:vec.pop_back();
2. 指定位置删除:vec.erase(vec.begin()+1);
3. 清空:vec.clear();

1. 尾部删除:str.pop_back();
2. 删除子串:str.erase(1, 2);(从第2位删2个字符)
3. 清空:str.clear();

1. 按键删除:mp.erase(101);
2. 清空:mp.clear();

获取长度

vec.size()(元素个数)
vec.empty()(是否为空)

str.size()/str.length()(字符数)
str.empty()(是否为空)

mp.size()(键值对个数)
mp.empty()(是否为空)

遍历元素

// 方式1:范围for
for (int num : vec) { ... }
// 方式2:迭代器
for (auto it = vec.begin(); it != vec.end(); ++it) { *it; }

// 范围for
for (char c : str) { ... }
// 迭代器
for (auto it = str.begin(); it != str.end(); ++it) { *it; }

// 范围for(pair.first=键,pair.second=值)
for (auto& pair : mp) { pair.first; pair.second; }
// 迭代器
for (auto it = mp.begin(); it != mp.end(); ++it) { it->first; it->second; }

查找元素

// 需包含
auto it = std::find(vec.begin(), vec.end(), 10);
if (it != vec.end()) { 找到元素 }

// 查找子串位置
size_t pos = str.find("llo");
if (pos != std::string::npos) { 找到子串 }

// 按键查找(核心方式)
auto it = mp.find(101);
if (it != mp.end()) { 找到键值对 }

关键补充说明

  1. 迭代器通用规则:所有STL容器的迭代器都遵循begin()(起始位置)、end()(末尾下一位)规则,end()不指向有效元素,仅作为结束标记;
  2. map的特殊点mp[key]是“读写一体”,读取不存在的键会自动插入该键并赋值默认值(如string为空、int为0),因此只读时优先用find()
  3. 空容器判断:所有容器都可用empty()判断是否为空,比size() == 0更高效;
  4. Qt容器适配:Qt的QVector/QString/QMap操作和上表几乎一致,仅需替换:
    • 头文件:<QVector>/<QString>/<QMap>
    • 输出:用qDebug()替代cout,如qDebug() << vec[0];
    • 特有添加方式:vec << 1 << 2;(Qt容器支持)

总结

  1. 核心操作(创建、添加、访问、遍历、清空)在不同容器中逻辑统一,仅语法细节有差异;
  2. vector/string侧重“有序列表操作”,map侧重“键值对的键查找/删除”;
  3. 遍历优先用范围for(简洁),需要精准控制位置时用迭代器
  4. 查找操作中,string用find()、map用find()、vector需配合<algorithm>std::find()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/3 19:12:05

黑客能让 AI 发辞职信?OpenAI 承认 Atlas 浏览器提示词注入攻击难以根治

OpenAI 在当地时间周一发布的一篇博客文章中详细阐述了该公司为增强 Atlas 的防御能力、抵御持续攻击所采取的措施&#xff0c;并写道&#xff1a;“提示词注入攻击就像网络上的诈骗和社会工程学攻击一样&#xff0c;几乎不可能被完全‘攻克’。”该公司坦承&#xff0c;ChatGP…

作者头像 李华
网站建设 2026/2/4 21:44:48

14、高速始终在线的电缆和DSL连接:家庭网络接入指南

高速始终在线的电缆和DSL连接:家庭网络接入指南 在现代生活中,互联网连接已成为必不可少的一部分。对于家庭用户来说,高速始终在线的电缆或DSL互联网连接是最佳选择。这种连接方式通常提供300 - 500Kbps的速度,性能远优于传统的拨号上网。而且,由于电缆和DSL提供始终在线…

作者头像 李华
网站建设 2026/1/30 6:51:05

Open-AutoGLM实战指南(新手必看的8大核心技巧)

第一章&#xff1a;Open-AutoGLM使用教程Open-AutoGLM 是一个开源的自动化自然语言处理框架&#xff0c;专为快速构建和部署基于 GLM 架构的语言模型应用而设计。它支持任务自动识别、输入解析、上下文管理与多轮对话能力&#xff0c;适用于智能客服、自动化报告生成等场景。环…

作者头像 李华
网站建设 2026/1/30 14:01:07

21、探索科技电视与网络技术的精彩世界

探索科技电视与网络技术的精彩世界 在当今数字化时代,科技的发展日新月异,深刻地影响着我们生活的方方面面。科技电视(TechTV)作为专注展示科技影响力的平台,以及丰富多样的网络技术知识,为我们打开了了解科技世界的大门。 科技电视(TechTV)的魅力 TechTV 是唯一一家…

作者头像 李华
网站建设 2026/2/2 21:29:06

二阶提示词注入在多Agentic场景下的攻击探索

1.引言 随着Agentic的不断发展&#xff0c;目前有一种发展趋势是多Agentic协作与上下文共享。这种共享方式让任务自动化能力大增&#xff0c;但也引入了新的攻击面。攻击者可以利用提示词注入攻击一个Agentic&#xff0c;从而操纵此Agentic去攻击其他Agentic。这类提示词注入攻…

作者头像 李华
网站建设 2026/2/3 2:20:08

如何构建一个真正理解图像、表格和文本的多模态 RAG 系统?

构建多模态 RAG 系统的终极指南照片由 Sol Ponce 提供&#xff0c;发布在 Unsplash 三个月前&#xff0c;我看着我们新做的 AI 应用在很多简单问题上“翻车”。不是因为 AI 不够聪明&#xff0c;也不是因为数据不够&#xff0c;而是答案在一张图里&#xff0c;而这个 AI 只能读…

作者头像 李华