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

C++标准库中 std::string 类提供的 insert 成员函数的不同重载版本

下图是C++标准库中 std::string 类提供的 insert 成员函数的不同重载版本,可点击C++标准库获取
在这里插入图片描述
以下是std::string::insert各重载版本的功能及参数解释:


1. 插入完整字符串

string& insert(size_t pos, const string& str);  
  • 功能:在字符串的pos位置插入另一个字符串str
  • 示例
    std::string s = "Hello";  
    s.insert(3, "XYZ"); // 结果:"HelXYZlo"  
    

2. 插入子字符串

string& insert(size_t pos, const string& str, size_t subpos, size_t sublen);  
  • 功能:在字符串的pos位置插入str中从subpos开始的sublen个字符。
  • 注意:若sublen超过str长度,则取到str末尾。
  • 示例
    std::string s = "Hello";  
    std::string str = "ABCDE";  
    s.insert(2, str, 1, 3); // 插入"BCD",结果:"HeBCDllo"  
    

3. 插入C风格字符串

string& insert(size_t pos, const char* s);  
  • 功能:在pos位置插入以空字符结尾的C风格字符串s
  • 示例
    std::string s = "Hello";  
    s.insert(4, "XYZ"); // 结果:"HellXYZo"  
    

4. 插入指定长度的字符数组

string& insert(size_t pos, const char* s, size_t n);  
  • 功能:在pos位置插入字符数组s的前n个字符(即使包含\0也会插入)。
  • 示例
    std::string s = "Hello";  
    s.insert(1, "ABCD", 2); // 插入"AB",结果:"HABello"  
    

5. 填充多个相同字符

string& insert(size_t pos, size_t n, char c);  
  • 功能:在pos位置插入n个字符c
  • 示例
    std::string s = "Hello";  
    s.insert(3, 4, 'X'); // 结果:"HelXXXXlo"  
    

6. 通过迭代器插入多个字符

void insert(iterator p, size_t n, char c);  // C++98中为void,C++11起返回迭代器  
  • 功能:在迭代器p指向的位置插入n个字符c
  • 注意:C++11后返回值改为指向插入的第一个字符的迭代器。
  • 示例
    std::string s = "Hello";  
    s.insert(s.begin() + 2, 3, 'Z'); // 结果:"HeZZZllo"  
    

7. 通过迭代器插入单个字符

iterator insert(iterator p, char c);  
  • 功能:在迭代器p指向的位置插入单个字符c,返回指向插入字符的迭代器。
  • 示例
    std::string s = "Hello";  
    auto it = s.insert(s.begin() + 1, 'X'); // 结果:"HXello",it指向'X'  
    

8. 通过迭代器范围插入序列

template <class InputIterator>  
void insert(iterator p, InputIterator first, InputIterator last);  
  • 功能:在迭代器p指向的位置插入范围[first, last)内的字符序列。
  • 示例
    std::string s = "Hello";  
    std::vector<char> vec {'A', 'B', 'C'};  
    s.insert(s.begin() + 3, vec.begin(), vec.end()); // 结果:"HelABClo"  
    

注意事项

  1. 参数合法性pos必须在[0, size()]范围内,否则可能抛出std::out_of_range异常。
  2. 内存分配:插入操作可能导致字符串扩容(重新分配内存)。
  3. 标准差异
    • C++11起部分方法返回值类型调整(如返回迭代器)。

总结

std::string::insert提供了多种灵活的插入方式,覆盖从字符串片段到迭代器范围的操作。选择合适的方法可以高效处理字符串拼接、填充或动态修改需求。

http://www.lryc.cn/news/2385197.html

相关文章:

  • Qt window frame + windowTitle + windowIcon属性(3)
  • 解决:VMware 虚拟机 Ubuntu 系统共享文件夹无法访问问题
  • Dify源码学习
  • 静态网站部署:如何通过GitHub免费部署一个静态网站
  • 【拯救小狗】2022-1-3
  • PS2025 v26.7 Photoshop2025+AI生图扩充版,支持AI画图
  • 怎么开发一个网络协议模块(C语言框架)之(三) 全局实例
  • ShenNiusModularity项目源码学习(30:ShenNius.Admin.Mvc项目分析-15)
  • 香港维尔利健康科技集团全面推进AI医疗落地,构建智慧健康管理新模式
  • 在 .NET 环境下实现跨进程高频率读写数据
  • Arduino和STM32的区别详解
  • 选择合适的Azure数据库监控工具
  • bi软件是什么?bi软件是做什么用的?
  • DeepSeek 赋能智能电网:从技术革新到全场景应用实践
  • xdvipdfmx:fatal: File ended prematurely. No output PDF file written.
  • python进行while遍历的常见错误解析
  • 锐化算子构建方法(机翻)
  • GO语言学习(七)
  • 算法中的数学:费马小定理
  • 【TypeScript】知识点梳理(四)
  • 【Python 算法零基础 4.排序 ③ 插入排序】
  • LangGraph实现多智能体的方法
  • wordpress主题开发中常用的12个模板文件
  • 聚铭安全管家平台2.0重磅发布——大模型智驱高效降本新方向
  • Android singleTop启动模式开启新页面
  • 使用注解动态映射:根据实体List列表动态生成Excel文件
  • 基于cornerstone3D的dicom影像浏览器 第二十一章 显示DICOM TAGS
  • 【循环位运算——uint32,DP】
  • 贪心介绍 LeetCode 455.分发饼干 LeetCode 376. 摆动序列 LeetCode 53. 最大子序和
  • 算法学习笔记·数学·快速幂