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

下图是C++标准库中 std::string 类提供的 insert 成员函数的不同重载版本,可点击C++标准库获取

以下是std::string::insert各重载版本的功能及参数解释:


1. 插入完整字符串

cpp 复制代码
string& insert(size_t pos, const string& str);  
  • 功能 :在字符串的pos位置插入另一个字符串str

  • 示例

    cpp 复制代码
    std::string s = "Hello";  
    s.insert(3, "XYZ"); // 结果:"HelXYZlo"  

2. 插入子字符串

cpp 复制代码
string& insert(size_t pos, const string& str, size_t subpos, size_t sublen);  
  • 功能 :在字符串的pos位置插入str中从subpos开始的sublen个字符。

  • 注意 :若sublen超过str长度,则取到str末尾。

  • 示例

    cpp 复制代码
    std::string s = "Hello";  
    std::string str = "ABCDE";  
    s.insert(2, str, 1, 3); // 插入"BCD",结果:"HeBCDllo"  

3. 插入C风格字符串

cpp 复制代码
string& insert(size_t pos, const char* s);  
  • 功能 :在pos位置插入以空字符结尾的C风格字符串s

  • 示例

    cpp 复制代码
    std::string s = "Hello";  
    s.insert(4, "XYZ"); // 结果:"HellXYZo"  

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

cpp 复制代码
string& insert(size_t pos, const char* s, size_t n);  
  • 功能 :在pos位置插入字符数组s的前n个字符(即使包含\0也会插入)。

  • 示例

    cpp 复制代码
    std::string s = "Hello";  
    s.insert(1, "ABCD", 2); // 插入"AB",结果:"HABello"  

5. 填充多个相同字符

cpp 复制代码
string& insert(size_t pos, size_t n, char c);  
  • 功能 :在pos位置插入n个字符c

  • 示例

    cpp 复制代码
    std::string s = "Hello";  
    s.insert(3, 4, 'X'); // 结果:"HelXXXXlo"  

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

cpp 复制代码
void insert(iterator p, size_t n, char c);  // C++98中为void,C++11起返回迭代器  
  • 功能 :在迭代器p指向的位置插入n个字符c

  • 注意:C++11后返回值改为指向插入的第一个字符的迭代器。

  • 示例

    cpp 复制代码
    std::string s = "Hello";  
    s.insert(s.begin() + 2, 3, 'Z'); // 结果:"HeZZZllo"  

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

cpp 复制代码
iterator insert(iterator p, char c);  
  • 功能 :在迭代器p指向的位置插入单个字符c,返回指向插入字符的迭代器。

  • 示例

    cpp 复制代码
    std::string s = "Hello";  
    auto it = s.insert(s.begin() + 1, 'X'); // 结果:"HXello",it指向'X'  

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

cpp 复制代码
template <class InputIterator>  
void insert(iterator p, InputIterator first, InputIterator last);  
  • 功能 :在迭代器p指向的位置插入范围[first, last)内的字符序列。

  • 示例

    cpp 复制代码
    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提供了多种灵活的插入方式,覆盖从字符串片段到迭代器范围的操作。选择合适的方法可以高效处理字符串拼接、填充或动态修改需求。

相关推荐
汉字萌萌哒24 分钟前
2019CCF-CSP入门级C++试题解析
java·开发语言·c++
叠层归一研究院30 分钟前
AGI 系统(十一):二阶网络 — 二阶递归 × 多主体 (元符号网络)
开发语言·人工智能·算法·php·agi
小雨笙笙42 分钟前
C语言:变量三属性——存储类型
c语言·开发语言
2401_890603401 小时前
C++ 继承
c++
果果燕2 小时前
C++ 学习笔记(二):类与对象—— 构造函数与析构函数
开发语言·c++
江畔柳前堤2 小时前
Function Calling 与 Tool Calling:从认知到工程的全景深度解析
开发语言·网络·人工智能·深度学习·算法·机器学习·php
2601_949950632 小时前
Java 面试准备,用练题簿把“背过八股”变成“真正会答”
java·开发语言·面试·刷题·小程序推荐
老洋葱Mr_Onion2 小时前
【C++】信息学奥赛CSP通关之路——CSP-J/S第一轮原创全真模拟试卷集(2026)卷四全卷解析
开发语言·c++
zander2582 小时前
LeetCode 739:每日温度——为什么单调栈要持续弹出
开发语言·python·算法
無限進步D2 小时前
Java 函数式编程(Lambda)
java·开发语言