C++ String_view28 Aug 2024 | 5 分钟阅读 引言C++ 中与字符串交互的默认方法称为 std::string,因为它为用户提供了广泛的有用功能。在许多其他字符串操作中,std::string 提供了 字符串操作,包括查找子字符串、比较字符串、连接字符串和切片字符串。但是,每次对 string 执行操作时,std::string 都需要动态分配更多内存以及额外的缓冲区空间。 定义 string_view。String_view 只能用于查看 string;它不能用于从概念上更改字符串本身。与创建字符串副本不同,创建 string_view 时无需复制数据。在堆空间方面,它也小于 std::string。它仅在 C++ 17 版本中可用,std::string_view 无法更改底层数据。 轻量级的 std::string_view 对象仅引用连续的字符序列,并使用与 std::_string 接口相似的接口提供对字符串或字符串一部分的只读访问。与维护自身字符串副本的 std::string 不同,它提供了对源代码中其他位置定义的字符串的视图。 它有两个成员 _size 和一个指向字符数组开头的 const char*。它引用一个不属于任何人的字符串。它在头文件(#include "string_view")和 std:: 中指定。 我们为什么要使用 std::string_view?有多种原因可能需要 string_view。其中一些如下:
语法 以下语法用于声明 string_view 对象 通过这样做,字符串 "Hello, world!" 被 string_view 对象引用。 成员 为 string_view 类创建了以下成员:
方法这些是 string_view 类中可用的方法 begin() 它返回指向字符串开头的指针。 end() 它返回指向字符串末尾的指针。 length() 它返回字符串的长度。 size_t start, size_t end, substr 这是一个新的 string_view 对象,它引用当前字符串的一部分并返回。 compare(const std::string_view& other) 它将当前字符串与另一个 string_view 对象进行比较。 equals(const std::string_view& other) 如果当前字符串匹配另一个 string_view 对象,则返回 true。 find(char c) 它返回字符串中给定字符第一次出现的索引。 rfind(char c) 它返回字符串中给定字符最后一次出现的索引。 contains(char c) 如果字符串中存在所请求的字符,则返回 true 值。 std::string_view 实际使用场景让我们通过一些例子来看看我们是如何实际使用 std::string_view 的; 常量字符串是 std::string 的一个常见缺点。此程序说明了在使用 std::string 处理常量字符串时出现的问题 输出 Hello !, JavaTpoint Hello !, JavaTpoint Hello !, JavaTpoint 说明 结果与预测相符。但是,为了显示 "Hello!, JavaTpoint" 两次,std::string 执行了两次内存开销。然而,在这种情况下,只需要读取文本 ("Hello!, JavaTpoint");不需要写入操作。那么,为什么要反复分配内存来显示字符串呢?C++17 提出了 std::string_view(),它在不向内存添加新对象的情况下提供了 预定义的 char str[] 的视图,以便更有效地处理字符串。 std::string 的问题通过分配两个不同的字符串变量,在上面的示例中,相同的字符串 str_1 被写入了两次。因此,内存是使用静态内存分配为两个变量 str_2 和 str_3 分配的,这使我们的内存加倍。 使用 std::string_view 的优点std::string_view 有多种优点。此函数的一些主要优点如下: 更便宜、更轻量 轻量级、成本更低的 std::string_view 的基本目的是提供字符串的视图。无需像在上述示例中所做的那样以低效的方式复制字符串,并且在创建 string_view 时会增加 RAM 的开销。当对所观察的字符串进行更改时,这些更改会立即反映在 std::string_view 中,从而大大提高了字符串复制过程的效率。 更高的效率 std::string_view 优于 const std::string&,因为它消除了在字符串开头必须存在 std::string 对象的需要。std::string_view 由两个元素组成,第一个是 const char*,它指定数组的起始位置,第二个是大小。 支持重要功能std::string_view 支持对 std::string 执行的大多数基本操作,例如 substr、compare、find 和 重载的比较运算符(例如 ==、> 和 !=)。由于只读是我们的选择,它通常消除了对 std::string 对象声明的需求。 以下是使用 std::string_view 的上述程序的准确源代码: 输出 Hello !, JavaTpoint Hello !, JavaTpoint Hello !, JavaTpoint 说明 结果将与上面看到的结果相同,但内存中不会生成字符串 "Hello!, JavaTpoint" 的更多副本。 下面是演示字符类型的 C++ 程序输出 13 Hello, world! Std::string_view 示例下面的示例演示了如何将大多数基于字符串的函数与 std::string_view 结合使用,包括函数 str.compare()、str.back()、str.cend() 和 str.at()。 输出 The strings are equal. The last character of the string is ! The end pointer of the string is The character at index 5 is , 下一个主题C++ 中的匿名对象 |
在本教程中,我们将学习如何声明一个返回整数指针数组指针的 C/C++ 函数。第 1 部分:创建一个考虑 int* 参数并生成指向四个整数指针列表的指针的函数。虽然这乍一看可能很困难,...
阅读 3 分钟
摘要:在本文中,我们将学习 . seekg() 函数允许在 iostream 库中访问任何文件位置。它是文件处理的一部分,可以在 fstream 头文件中找到。它用于从输入流中提取...。
阅读 4 分钟
简介:在翻译 C 和 C++ 源代码时,一组称为三字符序列的字符会被替换为单个字符。为了允许使用不包含 C 语言所需所有字符的字符集进行编程……
阅读 2 分钟
正如我们所知,C++ 编程语言有许多内置函数可以帮助我们避免编写长行代码。其中一个函数是 C++ 编程语言的标准模板库 (STL) 中的 multimap find 函数。它将帮助我们...
阅读 4 分钟
Nesbitt 不等式?数学上表示的不等式关系,它连接了三个正数 a、b 和 c 的算术平均值和调和平均值。更准确地说,它指出这些数字的对的算术平均值的倒数之和大于...
阅读 13 分钟
在本文中,我们将讨论一个 C++ 程序来计算数组的双峰性。数组的双峰性是 - 初始化为 0。如果后续元素大于前一个值,则增加到一。如果下一个元素小于...则减一。
阅读 2 分钟
在 C++ 中,可以使用算术运算符来对两个数字进行加法运算。用于加法的算术运算符是加号(+)。要将两个数字相加,您首先声明用于存储数字的变量,然后使用加号将它们相加。C++ 代码:#include...
阅读 3 分钟
在处理 C++ 编程时,格式化输出在提高代码可读性和用户友好性方面起着至关重要的作用。在控制输出格式的可用工具中,setf() 函数是一项有价值的功能。这篇博文将深入探讨 setf() 函数...
阅读 3 分钟
在本文中,我们将通过一个例子讨论如何在 C++ 中找到 N 中设置位和未设置位计数之间的绝对差。该任务涉及确定整数的设置位(值为 1 的位)和未设置位之间的绝对差...
阅读 3 分钟
在本文中,您将了解 C++ 中的块交换算法用于数组旋转及其示例。但是,在进行实现之前,您必须了解数组旋转。C++ 中的旋转:- 数组旋转是编程和计算机科学中的基本操作。它涉及...
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India