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

相关推荐
1024奇点7 小时前
【仓颉语言入门 · 第二篇 第 22 课】
开发语言·ide·开源
Warren2Lynch8 小时前
C4 模型详解:利用 Visual Paradigm 可视化软件架构的综合指南
开发语言·uml
FlightYe9 小时前
视界原理之3D视频(四):裸眼、眼镜和头显
android·linux·c++·3d·ffmpeg·音视频
Knight_AL9 小时前
Java 文件下载时文件名中的 `#` 被转换成 `%23`?一次 URL 编码与解码问题排查
java·开发语言
FRing039 小时前
vue2干货总结2(v-bind、v-for、v-model、指令修饰符、v-bind操作class和style)
开发语言·前端·vue.js·vue2
by2099910 小时前
C++ 智能指针的所有权与使用
开发语言·c++·经验分享
砚底藏山河10 小时前
python量化自定义周期 K 线合成
java·开发语言·数据库·python·金融
IT召唤狮10 小时前
开源企业级零信任项目Pangolin,零信任能挡住PHP核弹漏洞吗?
开发语言·开源·php
知已难寻10 小时前
03 · OpenStack的计算管理 Nova
运维·服务器·开发语言·云原生·云计算·openstack·开源软件
Rover Ramble10 小时前
C++ 用互斥锁实现读写锁
开发语言·c++