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

相关推荐
程序猿追3 小时前
kotlin-retry 接入鸿蒙后,怎样确认它真的会停止重试
开发语言·kotlin·harmonyos
我是人✓3 小时前
Java文件上传三方式对比:从传统到SpringBoot
java·开发语言
智能直播3 小时前
网络RTMP拉流不卡顿、声音不同步,一文讲透缓冲区、时间戳
开发语言·ffmpeg·php·音视频·视频编解码
墨云安全4 小时前
内网资产无法暴露到公网,怎么做安全检测?2026 年内网渗透测试的落地路径
开发语言·安全·网络安全·渗透测试·php
摇滚侠4 小时前
《计算机是如何工作的:人人都能懂的计算机软硬件工作原理》第 9 章 机器码与汇编语言 阅读笔记 9
java·开发语言·笔记
Cc.Y4 小时前
Java零基础入门:深入Java核心:文件IO与序列化全解
java·开发语言·python
xier_ran4 小时前
【infra之路】AI 编译器学习笔记(六):重拾 C++——lambda 与 MLIR 中的回调
c++·笔记·学习
jimy16 小时前
c++的 Type Traits (一)
开发语言·c++
别动我齐刘海7 小时前
Linux 系统调试学习2
linux·运维·c++·人工智能·学习·机器学习·机器人
Web极客码7 小时前
Python Ollama 本地 Agent 入门与订单查询实践
开发语言·jvm·python