C++中string与其他STL容器的一些不同点

C++——STL——string容器 将字符串从下标pos1开始删除n1个字符,删除后在下标pos1处插入s从下标pos2开始的n2个字符。将字符串从下标pos1开始删除n1个字符,删除后在下标pos处插入c的前n2个字符。将字符串从下标pos1开始删除n1个字符,删除后在下标pos1处插入n2个ch字符。将字符串从下标pos开始删除n个字符,删除后在下标pos处插入c。将字符串从下标pos开始删除n个字符,删除后在下标pos处插入s。删除字符串从pos下标开始(包括pos下标)的n个字符。删除迭代器【first, last)区间的字符。 阅读详情

1.基本定义和用途

  1. string是一个专门用于处理字符串的类,它是basic_string模板的一个特化。
  2. 主要用于存储和操作文本数据。
  3. 底层实现通常是一个字符数组,并且具有字符串特定的操作,如连接、查找、子串等。

2.底层实现

  1. string 在大多数实现中是一个动态数组,通常包括一个指向字符数组的指针、长度(size)和容量(capacity)。语义上表示一个不可分割的文本序列。
  2. string通常采用小字符串优化(Small String Optimization, SSO),对于短字符串,直接存储在栈上,避免堆分配。
  3. string主要用于存储char类型,其他容器可以存储任意类型的对象。
  4. string内部管理一个以空字符('\0')结尾的字符数组,与C语言中的C风格字符串(char*)具有很好的兼容性,通过 c_str() 方法可以轻松获取C风格字符串,这些使得它可以方便地与C风格字符串互操作。

3.特定操作的支持

  1. sting专门针对字符串进行了优化,提供了许多字符串特有的操作,比如 append, substr, find, compare, replace 等。
  2. C++标准库提供了一些专门用于字符串处理的非成员函数算法,如std::stoi, std::to_string等。

append

std::string str = "Hello";
str.append(" World");       // 结果为 "Hello World"
str.append(3, '!');         // 结果为 "Hello World!!!"

 substr

std::string str = "Hello, World!";
std::string sub = str.substr(7, 5);  // 结果为 "World"
std::string sub2 = str.substr(7);    // 结果为 "World!"

find

std::string str = "Hello, World!";
size_t pos = str.find("World");  // 结果为 7
size_t pos2 = str.find('o');     // 结果为 4
size_t pos3 = str.find("Earth"); // 结果为 std::string::npos

compare

std::string str1 = "Hello";
std::string str2 = "World";
int result = str1.compare(str2);   // 结果为负数,因为 "Hello" 小于 "World"
int result2 = str1.compare("Hello"); // 结果为 0,因为两个字符串相等

replace

std::string str = "Hello, World!";
str.replace(7, 5, "Universe");  // 结果为 "Hello, Universe!"
str.replace(0, 5, 3, '*');      // 结果为 "***o, Universe!"

4.函数中的使用差异

在 C++ 的 std::string 类中,有一些算法函数既支持使用字符串的索引(通过下标)或完整的字符串对象,又支持使用迭代器来进行操作。这些函数可以处理字符串的特定范围或字符序列,提供了灵活的操作方式。以下是支持这两种操作方式的函数:

1. replace

  • 支持下标和迭代器:

    • 通过下标:可以使用起始位置 pos 和长度 len 来替换字符串的子串。
    • 通过迭代器:可以指定要替换的范围的起始和结束迭代器。
      std::string str = "Hello, World!";
      
      // 使用下标
      str.replace(7, 5, "Universe");  // 结果为 "Hello, Universe!"
      
      // 使用迭代器
      auto it1 = str.begin() + 7;
      auto it2 = str.begin() + 14;
      str.replace(it1, it2, "Everyone");  // 结果为 "Hello, Everyone!"
      

2. insert

  • 支持下标和迭代器:

    • 通过下标:可以使用索引 pos 在指定位置插入字符串或字符。
    • 通过迭代器:可以使用迭代器在指定位置插入字符串或字符。
std::string str = "Hello, World!";

// 使用下标
str.insert(7, "Beautiful ");  // 结果为 "Hello, Beautiful World!"

// 使用迭代器
auto it = str.begin() + 7;
str.insert(it, 'X');  // 结果为 "Hello, XBeautiful World!"

3. erase

  • 支持下标和迭代器:

    • 通过下标:可以使用起始位置 pos 和长度 len 删除字符串中的一部分。
    • 通过迭代器:可以使用迭代器指定要删除的字符或范围。
std::string str = "Hello, Beautiful World!";

// 使用下标
str.erase(7, 10);  // 结果为 "Hello, World!"

// 使用迭代器
auto it1 = str.begin() + 7;
auto it2 = str.begin() + 12;
str.erase(it1, it2);  // 结果为 "Hello, ld!"

4. find

  • 支持下标和迭代器:

    • 通过下标:虽然 find 函数主要是基于索引查找子串或字符,但结果可以转换为迭代器形式。
    • 通过迭代器:虽然 find 本身不直接接受迭代器作为参数,但可以使用下标结果来获取相应的迭代器。
std::string str = "Hello, World!";

// 使用下标查找
size_t pos = str.find("World");  // 结果为 7

// 将结果转换为迭代器
if (pos != std::string::npos) {
    auto it = str.begin() + pos;
    std::cout << *it;  // 输出 'W'
}

 

5. substr

  • 支持下标和迭代器:

    • 通过下标:可以指定起始位置和长度来提取子串。
    • 通过迭代器:虽然 substr 本身不直接接受迭代器,但可以通过迭代器转换为索引来提取子串。
std::string str = "Hello, World!";

// 使用下标提取子串
std::string sub = str.substr(7, 5);  // 结果为 "World"

// 使用迭代器
auto it1 = str.begin() + 7;
auto it2 = str.begin() + 12;
std::string sub2(it1, it2);  // 结果为 "World"

6.小结

以下是 std::string 支持通过下标和迭代器操作的主要函数:

  • replace:支持使用下标和迭代器替换字符串的部分内容。
  • insert:支持在指定位置(下标或迭代器)插入字符串或字符。
  • erase:支持通过下标和迭代器删除字符串的部分内容。
  • find:尽管主要基于下标操作,但查找到的位置可以转换为迭代器使用。
  • substr:主要基于下标操作,但可以通过迭代器转换来提取子串。

这些函数提供了丰富的字符串操作方式,在处理字符串时能够根据具体需求选择更合适的操作方式。

 5.总结

  1. string 和其他STL容器在算法函数上的区别主要体现在专有方法的可用性、效率优化和语义上。std::string 提供了大量专门处理字符串的函数,这使得它在处理字符串时比其他STL容器更加高效和方便,而其他STL容器则更通用,适用于处理各种类型的数据并与标准算法库无缝集成。在实际开发中,选择使用 std::string 的专有方法或标准算法需要根据具体的应用场景来决定。
  2. string 提供了下标和迭代器两种访问方式,各有优缺点。下标适合简洁、高效的随机访问,迭代器则适合灵活、复杂的遍历操作。对于简单的字符访问,下标是首选;对于需要复杂操作或与标准算法结合使用的场景,迭代器则更为合适。
C++ STL 容器详解:vector、string 和 map 的完全指南 在现代C++编程中,标准模板库(STL)提供的容器是不可或缺的工具。它们不仅大大简化了开发过程,还提供了高性能的数据结构实现。本文将深入探讨三种最常用的STL容器:vector、string和map,帮助您理解它们的特性、使用场景和最佳实践。 阅读详情

相关推荐

RTAB-map:实时高效的SLAM库

Real‐time appearance‐based mapping (RTAB‐Map)是一种基于外观的闭环检测方法,具有良好的内存管理,以满足处理大场景和在线长周期管理要求。RTAB‐Map集成了视觉和激光雷达SLAM方案,并支持目前绝大多数的传感器 是一个强大的、开源的Simultaneous Localization and Mapping(SLAM)库,专为机器人和无人驾驶领域设计。它提供了一套完整的解决方案,用于构建三维地图,并在未知环境中进行实时定位与导航。 github项目地址 RTAB-

weixin_45761399的博客 1万+

C++五大常用容器的特性及用途

C++ STL中最基本以及最常用的类或容器无非就是以下几个: string vector set list map 在我的博客中依次介绍了它们,并给出一些最常见的最实用的使用方法,做到快速入门。 这里,先介绍我学习他们的一些想法 以上五类常用容器,用法大致相同,当然也有略微不同,因此在学习他们时,要对照相似点,区别不同点,这样就能够快速入门。 我是小白,以下仅是粗浅看法,说的不对...

Hello,小高同学 3434

基于Unity引擎利用OpenCV和MediaPipe的面部表情和人体运动捕捉系统

增加了模型的绑定,利用Mediapipe这个强大的库可以实现识别面部表情的捕捉和人体结构运动的捕捉,基于以上的特性加入到Unity的人物模型中,实现实时的面部表情和人体运行的捕捉

BIgbossyii的博客 1万+

【C++】STL容器-string的遍历

在C++的标准模板库(STL)中,string作为一种常用的容器,扮演着存储和操作字符串的重要角色。本文将深入探讨STL中string容器的遍历方法,包括使用迭代器、指针、范围for循环以及std::for_each算法等多种方式。通过具体示例和代码实践,读者将能够熟练掌握string容器的遍历技巧,并在实际编程中灵活运用。

池央的博客 3890

吉林大学2016级唐班c语言期末考试B卷

` #include<stdio.h> #include<stdlib.h> //双指针法,每次从a,b中选一个最大的数,从后向前一次放在数组a中 int merge(int *a,int m,int *b,int n){ int i=m-1,j=n-1,k=m+n-1; while(i>=0&&j>=0){ if(a[i]>b[j])a[...

weixin_42339173的博客 1195

proteus仿真51单片机操作指南:串口通信仿真配置详解

深入讲解如何在proteus仿真51单片机中实现串口通信,涵盖虚拟串口设置、电路连接与调试技巧,帮助开发者高效完成通信仿真验证。

weixin_36197669的博客 570

C++ STL容器 —— string 用法详解

STL容器——string函数用法详解 写在前面:近期正在重新学习C++的STL容器,因此准备用一些大白话将STL函数的用法详细记录一下,主要介绍一些基本函数是怎么用的,并不涉及原理。写的不好或者理解的有问题, 请见谅. 下面说的 “运行之后” 表示: 运行上个语句之后的结果. 一行如果说的太长的话, 就得拖动下面的进度条才能看到后面的内容 因此将一段话分成了多行,就像现在这种形式 需要头文件...

Ember_Sky 9599

复现HumanMAC(HumanMAC: Masked Motion Completion for Human Motion Prediction)

Human3.6M和HumanEva-I都放到data目录下(记得将data_multi_modal-20250320T022408Z-001.zip和humaneva_multi_modal-20250320T022412Z-001.zip解压缩并且分别重命名为data_multi_modal和humaneva_multi_modal)。生成的gif存放在inference目录下zero_shot_<INDEX>下的out目录下。新建一个data目录,将

qq_52643100的博客 831

STL容器之string类

STL容器之string类

Xpccccc的博客 1138

基于YOLOv8的智能肿瘤检测系统:从图像到诊断的深度学习应用——含代码和论文

本文提出了一种基于YOLOv8深度学习的智能肿瘤检测系统,用于医学影像(CT/MRI/X光)的自动分析与诊断。针对传统人工阅片效率低、主观性强的问题,系统采用最新的YOLOv8目标检测算法,通过改进的C2F骨干网络、Anchor-Free检测头和解耦头等创新设计,实现高效精准的肿瘤定位。文章详细阐述了模型架构、数据处理流程、训练优化方法及PyQt5用户界面开发,为临床提供可靠的AI辅助诊断工具。实验结果表明,该系统在速度和准确率上达到良好平衡,有望提升肿瘤早期筛查效率。

FJN110的博客 199

B站评论情感分析实战:Python批量爬取+BERT正负向分类,精准度92%(附完整代码)

用技术手段自动化挖掘用户真实情感,比人工分析更高效、更客观。这套方案的精度能稳定在90%左右,完全满足实际应用需求。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1026

STL 容器详解——string 类

带你一命通关C++的STL容器 十分钟手撕 string 类

qq_61500888的博客 3679

学Simulink--特殊天气场景实例:基于Simulink的智能车辆雨天行驶仿真(感知与控制)

本文详细介绍了基于Simulink的智能车辆雨天行驶仿真系统。通过构建降雨-路面-传感器-控制全链路耦合模型,实现了雨天场景下的自适应控制。系统根据降雨强度动态调整路面附着系数和传感器性能参数,上层控制算法相应调整ACC安全距离、ESC增益等参数。仿真结果表明,系统能在不同降雨强度下自动降低车速、增大跟车距离,保持车辆稳定性。文章还提供了完整的Simulink建模流程、关键模型实现方法及工程实践要点,为全天候自动驾驶功能开发提供了有效的验证平台。

xiaoheshang_123的博客 167

熬夜爆肝!C++核心STL容器string知识点汇总整理【万字干货预警 建议收藏】

1 STL初识 1.1 STL的出现 软件行业一直希望建立一种可重复利用的东西 C++的面向对象和泛型编程思想,目的就是复用性的提升 大多情况下,数据结构和算法都未能有一套标准,导致被迫从事大量重复工作 为了建立数据结构和算法的标准,出现了STL 1.2 STL基本概念 STL:标准模板库 STL 主要分为: 容器(container) 算法(algorithm) 迭代器(iterator) 容器和算法之间通过迭代器进行无缝连接。 1.3 STL六大组件 STL大体分为六大组件,分别

hhladminhhl的博客 2777

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

C++ 带你吃透string容器的使用

C++ 带你吃透string容器的使用和常见的应用场景

Wzs040810的博客 2576

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

【c++】STL--string

讲解非常详细,欢迎大家观看!

includeevey的博客 3806

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

C++_认识STL及使用及实现第一个容器string

不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。

心动的那一刻,记忆便盛开了花 1001

【C++】STL简介 及 string的使用详解

STL简介 及 string的使用讲解

m0_70980326的博客 4007

【C++】STL容器--string的使用

string类的使用

2402_84357324的博客 2005

【C++入门到精通】C++入门 —— string类(STL)

本文以STL(Standard Template Library)和string类为主题,介绍了STL的概念、内容和使用前提。针对string类,详细探讨了它的定义、特点和常见操作,包括构造和初始化、字符串大小和容量、字符访问和修改、字符串连接和拼接、子串操作、字符串比较、字符串修改、获取字符的ASCII码,以及字符串大小写转换等。通过这些内容,读者将了解STL和string类的基本概念并掌握其常用操作,从而更有效地处理和操作字符串。

Yawesh的博客 1425

C++ STL 之 string容器-API函数

C++ STL string容器简介、常用API函数:构造、插入删除、赋值、拼接、查找替换、数据存取、字符串比较、sting类型转换为C语言风格;函数:append();compare();at();operator[];insert(); erase(); substr();c_str();

weixin_45925859的博客 1730

【C++深入浅出】STL之string用法详解

从本期开始,我们将进入STL的学习。STL(standard template libaray - 标准模板库)是C++标准库的重要组成部分。其不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。本期我们将要来学习一下STL中的string类,对比一下string和我们之前学习的常量字符串有什么区别。本文的重点在于使用,目标是掌握一些string类的常用接口函数并学会如何使用。之后我们会尝试模拟实现一个string类,理解string的底层实现原理。

忆梦初心的博客 4990

c++STL库容器介绍

黑马程序员C++课程(BV1et411b73Z)笔记

cO_ob的博客 2598

STL之容器string

STL的string容器

Serven的博客 1万+

【c++】STL容器-string的使用

一、STL 1. STL简要介绍 2. STL版本 3. STL六大组件 二、string 1. string的介绍 2. string的使用 1. 默认成员函数 1. 构造函数和拷贝构造函数 2. 析构函数 3. 赋值运算符重载 2. 迭代器的使用 范围for遍历和operator[]和operator<<或迭代器进行遍历 3. 容量有关的成员函数 4. 元素访问 5. 用于修改的成员函数 6. 字符串操作 7. 非成员函数的重载

重铸自身根基的博客 1623

【深入探索 C++ STL 容器 string】——字符串世界里的神奇魔法棒

C++ string 保姆级教程来啦!15000字一文带你掌握基础而又重要的C++ string类,从理解到应用,再从应用到实现,你想要的全都有,学string,认准这篇就够啦!!

bite_zwy的博客 2081
下一篇: 解决约瑟夫环的多种方法
py_cpp_java_c
博客等级 码龄3年 125粉丝 6原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值