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

相关推荐
似水明俊德1 分钟前
02-C#.Net-反射-面试题
开发语言·面试·职场和发展·c#·.net
Thera7771 小时前
C++ 高性能时间轮定时器:从单例设计到 Linux timerfd 深度优化
linux·开发语言·c++
炘爚2 小时前
C语言(文件操作)
c语言·开发语言
阿蒙Amon2 小时前
C#常用类库-详解SerialPort
开发语言·c#
凸头2 小时前
CompletableFuture 与 Future 对比与实战示例
java·开发语言
wuqingshun3141592 小时前
线程安全需要保证几个基本特征
java·开发语言·jvm
君义_noip2 小时前
信息学奥赛一本通 1952:【10NOIP普及组】三国游戏 | 洛谷 P1199 [NOIP 2010 普及组] 三国游戏
c++·信息学奥赛·csp-s
Moksha2622 小时前
5G、VoNR基本概念
开发语言·5g·php
jzlhll1232 小时前
kotlin Flow first() last()总结
开发语言·前端·kotlin
W.D.小糊涂2 小时前
gpu服务器安装windows+ubuntu24.04双系统
c语言·开发语言·数据库