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

substr erase unique

迭代器基础概念

迭代器是C++中用于遍历容器元素的抽象概念,类似于指针。它提供了一种统一的方式访问不同容器(如vectorliststring等)中的元素。

迭代器的核心操作包括解引用(*it)、递增(++it)、比较(it1 != it2)等。例如:

std::vector<int>vec={1,2,3};for(autoit=vec.begin();it!=vec.end();++it){std::cout<<*it<<" ";}

substr函数解析

substrstd::string的成员函数,用于提取子字符串,其原型为:

stringsubstr(size_t pos=0,size_t len=npos)const;
  • pos:起始位置(从0开始)
  • len:子字符串长度,默认为npos(直到字符串末尾)

示例:

std::string s="Hello, World!";std::string sub=s.substr(7,5);// "World"

图示:

注意事项

  • pos超出字符串长度,抛出std::out_of_range
  • 返回的子字符串是新的string对象,与原字符串独立

erase函数详解

erase用于删除容器或字符串中的元素,有三种常见形式:

  1. 删除单个元素:
iteratorerase(iterator position);
  1. 删除区间:
iteratorerase(iterator first,iterator last);
  1. 字符串按位置删除:
string&erase(size_t pos=0,size_t len=npos);

示例(删除vector中的偶数):

std::vector<int>v={1,2,3,4,5};for(autoit=v.begin();it!=v.end();){if(*it%2==0){it=v.erase(it);// erase返回下一个有效迭代器}else{++it;}}

unique算法应用

unique是定义在<algorithm>中的去重函数,其原型为:

ForwardIteratorunique(ForwardIterator first,ForwardIterator last);

特点

  • 仅移除相邻的重复元素
  • 实际不删除元素,而是将不重复元素移动到前面,返回新的逻辑结尾迭代器
  • 通常需要先对容器排序

示例:

std::vector<int>v={1,2,2,3,3,3,4};autolast=std::unique(v.begin(),v.end());v.erase(last,v.end());// 配合erase实现真正删除

图示:

迭代器失效问题

使用上述函数时需注意迭代器失效:

  • erase会使被删除元素及其后的迭代器失效
  • unique不直接导致失效,但后续操作可能需要更新迭代器
  • 正确做法是使用函数返回值更新迭代器:
it=container.erase(it);// 而非直接++it

综合应用示例

结合三者实现字符串处理:

std::string str="aaabbbcccdddeee";// 去重相邻字符autonew_end=std::unique(str.begin(),str.end());str.erase(new_end,str.end());// 变为"abcde"// 提取第2-4字符并删除std::string sub=str.substr(1,3);// "bcd"str.erase(1,3);// 剩余"ae"
http://www.jsqmd.com/news/616894/

相关文章:

  • Python全景与哲学:为何选择Python
  • 为什么你的PHP低代码表单在高并发下崩溃?揭秘Swoole协程注入式表单引擎的3步迁移路径
  • 2026 AI新技能:Harness Engineering——让Agent从“聪明”变成“可靠”
  • OpenClaw技能扩展:Kimi-VL-A3B-Thinking自动化内容审核方案
  • 在超大数据集下 DuckDB 与 MySQL 查询速度对比的
  • 2026年百元蓝牙耳机性价比推荐:入耳半入耳怎么选?
  • 艾体宝方案|企业如何把决策能力系统化?
  • 工业机器人工作站系统模型创建项目报告
  • EasyAnimateV5图生视频模型小白入门:5分钟快速部署与一键生成实战
  • 接口文档自动生成革命!OpenClaw让你彻底告别手写API文档(Java/Go/Python全栈通用)
  • OpenClaw语音交互扩展:百川2-13B-4bits量化模型+Whisper实时转录
  • GLM-4.1V-9B-Base开源镜像详解:预加载机制+服务自恢复设计原理
  • 世界第一个开源可商用 .NET Office 转 PDF 工具/库 - MiniPdf比
  • Intv_AI_MK11辅助Visio图表绘制:从文本描述到专业架构图
  • Go Routine 调度性能调优技巧
  • 安捷伦16060A Agilent16060A 变压器测试夹具
  • wan2.1-vae性能压测报告:并发5用户下平均响应时间<8.2s(2048×2048)
  • Meshroom终极指南:7步从照片到3D模型的免费开源解决方案
  • 后端开发者的Pixel Script Temple API服务设计指南
  • YOLO X Layout完整教程:Docker部署与Web操作详解
  • 小白也能懂!LFM2.5-1.2B-Thinking-GGUF快速上手:开箱即用的轻量级AI写作助手
  • 春联生成模型效果展示:‘健康‘、‘奋斗‘主题对联,意境优美接地气
  • jsontop.cn:一站式 JSON 在线工具,让接口调试与数据处理更高效
  • 我用了半年只留下这1个!2026年超好用的视频链接提取文字工具分享
  • 芒果文件编码转换工具 非常好用的代码转ANSI转UTF8格式小工具
  • OpenClaw CLI 与 Web UI 双模式使用:高效操控 AI 执行任务
  • NTA Alkyne,Nitrilotriacetic acid-Alkyne 技术参数与合成应用指南
  • Windows Defender彻底解决方案:三步移除Windows安全组件
  • Vue3 状态管理方案:Pinia 全指南
  • AI尚运动相机有配套APP/小程序?球类爱好者拍剪传全搞定!