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

[特殊字符] 顺序容器全操作解析(含string完整版)

一、顺序容器全家福

vector | deque | list | forward_list | array | string
每个容器都有自己的「超能力」和「弱点」,我们通过 六大操作维度 解剖它们!


二、操作详解与支持表
1. 构造与赋值
操作vectordequelistforward_listarraystring
C c;✔️✔️✔️✔️✔️
C c(n);✔️✔️✔️✔️✔️
C c(n, val);✔️✔️✔️✔️✔️
C c(begin, end);✔️✔️✔️✔️✔️
C c = {a,b,c};✔️✔️✔️✔️✔️✔️
c1 = c2✔️✔️✔️✔️✔️✔️

string专属技能

string s = "喵星人";  // 直接字符串字面量初始化
string s(5, 'A');    // "AAAAA"

2. 元素访问
操作vectordequelistforward_listarraystring
c.front()✔️✔️✔️✔️✔️✔️
c.back()✔️✔️✔️✔️✔️
c[n]✔️✔️✔️✔️
c.at(n)✔️✔️✔️✔️
c.data()✔️✔️✔️

string特有能力

cout << s[2];       // 访问字符(不检查越界)
cout << s.at(2);    // 越界抛异常
cout << s.data();   // 返回C风格字符串(等价c_str())

3. 增删元素
操作vectordequelistforward_listarraystring
push_back(val)✔️✔️✔️✔️(+=)
emplace_back(args)✔️✔️✔️
pop_back()✔️✔️✔️✔️
push_front(val)✔️✔️✔️
emplace_front(args)✔️✔️✔️
pop_front()✔️✔️✔️
insert(pos, val)✔️✔️✔️✔️✔️
emplace(pos, args)✔️✔️✔️✔️
erase(pos)✔️✔️✔️✔️✔️

string专属增删

s += "万岁";              // 尾部追加(等价push_back)
s.append("喵喵", 2);      // 追加部分字符串
s.insert(3, "❤️");       // 在位置3插入
s.erase(2, 3);           // 从位置2删除3个字符

4. 容量管理
操作vectordequelistforward_listarraystring
c.size()✔️✔️✔️✔️✔️✔️
c.empty()✔️✔️✔️✔️✔️✔️
c.resize(n)✔️✔️✔️✔️✔️
c.capacity()✔️✔️
c.reserve(n)✔️✔️
c.shrink_to_fit()✔️✔️✔️

string容量技巧

s.reserve(100);     // 预分配内存(避免频繁扩容)
s.shrink_to_fit();  // 释放多余内存(内存紧张时用)

5. 迭代器与算法
操作vectordequelistforward_listarraystring
begin()/end()✔️✔️✔️✔️✔️✔️
rbegin()/rend()✔️✔️✔️✔️✔️
算法兼容性✔️✔️✔️✔️

string特殊遍历

for (char ch : s) { ... }                  // 范围for循环
for (auto it = s.rbegin(); it != s.rend(); ++it) { ... } // 反向迭代

6. 专属技能(其他容器没有的!)
容器独门绝技示例
stringsubstr find replace c_strs.find("喵") s.substr(2)
listsplice merge uniquelist1.splice(it, list2)
array固定大小,栈内存分配array<int,5> arr;
vectordata()直接访问底层数组int* p = vec.data();

string的杀手锏

size_t pos = s.find("喵星人");    // 查找子串
s.replace(pos, 3, "汪星人");      // 替换子串
const char* cstr = s.c_str();    // 转C风格字符串

三、终极选择指南(含string)
需求推荐容器原因
需要随机访问+动态大小vector 或 string内存连续,访问快
高频头部操作deque 或 listdeque支持push_front
字符串处理string专为字符串优化
中间频繁插入删除listO(1)时间复杂度
固定大小数据array栈内存,无动态分配
内存敏感+预分配vector/stringreserve减少扩容开销

四、灵魂总结
  • string 是 vector<char> 的加强版
    拥有所有顺序容器的操作 + 专为字符串设计的接口(findsubstr等)

  • 性能关键点

    • string+=appendpush_back更高效(一次追加多个字符)

    • reserve预分配能避免多次内存重分配

  • 与其他容器的区别
    stringpush_back只能追加单个字符,而其他容器可以追加元素

相关文章:

  • MySQL-SQL
  • ToDesk云电脑将终结显卡溢价,Web端浏览器、安卓、IOS免费试用
  • Ubuntu 24.04 安装 Redis
  • 什么是Docker多架构容器镜像
  • 云原生作业五
  • Python排序算法详解
  • 一键高清修复、智能剪辑,媒体处理还能多智能?
  • 什么是网关?网关有什么作用?API网关的主要功能,SpringCloud可以选择有哪些API网关?什么是限流算法?网关如何实现限流?一篇文章读懂网关的前世今生
  • 国产网络变压器有哪些品牌比较好
  • Record-Mode 备案免关站插件,让 WordPress 备案不影响 SEO 和收录
  • 网络安全-防御 第一次作业(由于防火墙只成功启动了一次未补截图)
  • redis之lua实现原理
  • 07:串口通信(二):收发数据包
  • Docker Desktop之Nginx
  • HTTP的状态码
  • 海思3559a_使用2.0.4.0版SDK编译固件下载后i2c_write和i2c_read不支持怎么办
  • OpenCV机器学习(4)k-近邻算法(k-Nearest Neighbors, KNN)cv::ml::KNearest类
  • 蓝桥杯(B组)-每日一题(求最大公约数最小公倍数)
  • MongoDB 7 分片副本集升级方案详解(下)
  • 用Echarts的柱状图实现圆柱体效果
  • 河北6人在河道倒污泥被控污染环境案撤诉后,已拿到国赔决定书
  • 金融监管总局将研究出台专门的城市更新项目贷款管理办法:引导大力支持城中村的改造等
  • 中国旅游日|上天当个“显眼包”!体验低空经济的“飞”凡魅力
  • 天问二号探测器顺利转入发射区,计划5月底择机发射
  • 高飞已任南航集团党组副书记
  • 工人日报:应对“职场肥胖”,健康与减重同受关注