当前位置: 首页 > 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.cnnetsun.cn/news/1796091.html

相关文章:

  • Z-Image-Turbo-辉夜巫女在智能车领域的应用:车载系统界面概念图自动生成
  • 小白友好:无需代码,用MinerU轻松搞定财报图表分析
  • Ubuntu 系统配置 VS Code C++ 开发环境
  • 为什么你的PHP低代码表单在高并发下崩溃?揭秘Swoole协程注入式表单引擎的3步迁移路径
  • 并发程序的隐形杀手:深入浅出 CPU 伪共享与性能优化
  • 收藏备用!【重磅整理】2025 计算机专业就业方向全景图:薪资、技能与前景详解
  • 高密目前靠谱的软装馆
  • Zephyr SMF轻量状态机实战与嵌入式开发优化
  • 很多人对渗透测试工程师的认知停留在“模拟黑客攻击”,但实际工作内容远比这更全面。
  • 物联网浏览器(IoTBrowser)-js开发人脸识别肚
  • LobeChat进阶使用:自定义Agent打造专属AI助手实战教程
  • 基础篇一 Nuxt4路由详解:动态路由与路由参数
  • mPLUG视觉问答修复笔记:解决RGBA崩溃和路径依赖,打造稳定本地服务
  • linux驱动----驱动程序
  • 分享10款答辩AI工具及模板体验,aibiye等神器助你高效完成答辩。
  • SiameseAOE保姆级教程:Web界面操作,轻松抽取评论中的属性和观点
  • SDMatte模型部署优化:利用Docker容器化实现环境隔离与一键迁移
  • SAP揭秘者-QM质量通知单项目精讲第二季 解决方案系统操作篇
  • HTTP数据缓存与并发控制:http-api-guide性能优化深度解析
  • nli-distilroberta-base在舆情分析中的实战:识别报道与评论间的观点倾向性
  • Wan2.2-I2V-A14B私有部署避坑指南:RTX4090D环境配置,一次成功不报错
  • 如何突破信息壁垒?这款开源工具的边界与价值
  • Tailwind CSS如何实现溢出滚动处理_利用overflow-auto添加CSS滚动条
  • SecGPT-14B环境部署:双4090显卡下tensor_parallel_size=2稳定运行配置
  • Tao-8k构建智能运维(AIOps)大脑:日志异常检测与根因分析
  • 手把手教你在Windows上安装OpenClaw(2026最新版,零基础可上手)
  • 掌握CarouselLayoutManager水平与垂直布局:终极技巧
  • Vue使用Electron将网页打包为exe文件
  • ClearerVoice-Studio插件开发:为Audacity添加AI降噪功能
  • CosyVoice-300M Lite安装报错?解决tensorrt依赖问题完整指南