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

相关推荐
lly202406几秒前
C 标准库 - `<stdio.h>`
开发语言
沫璃染墨2 分钟前
C++ string 从入门到精通:构造、迭代器、容量接口全解析
c语言·开发语言·c++
jwn9992 分钟前
Laravel6.x核心特性全解析
开发语言·php·laravel
迷藏4945 分钟前
**发散创新:基于Rust实现的开源合规权限管理框架设计与实践**在现代软件架构中,**权限控制(RBAC)** 已成为保障
java·开发语言·python·rust·开源
6Hzlia27 分钟前
【Hot 100 刷题计划】 LeetCode 17. 电话号码的字母组合 | C++ 回溯算法经典模板
c++·算法·leetcode
功德+n34 分钟前
Linux下安装与配置Docker完整详细步骤
linux·运维·服务器·开发语言·docker·centos
明日清晨36 分钟前
python扫码登录dy
开发语言·python
我是唐青枫41 分钟前
C#.NET gRPC 深入解析:Proto 定义、流式调用与服务间通信取舍
开发语言·c#·.net
JJay.1 小时前
Kotlin 高阶函数学习指南
android·开发语言·kotlin
bazhange1 小时前
python如何像matlab一样使用向量化替代for循环
开发语言·python·matlab