如何解决是否有子字符串的标准库类?
我有一个很大的只读字符串,我扫描了它的语法,并根据这个简单的语法提取了一堆较小的字符串,稍后我会使用这些字符串进行进一步处理。根据测试,将大部分大字符串创建并复制到小字符串中是一种性能瓶颈(每个大字符串有数千个)。
我想我实际上并不需要为-分配,并复制数据。我真正需要的是一种字符串片段类型,它只会存储指向相关数据开头和长度的指针,但同时,它应该是 std::string 和所有它具有的标准库交互。
无论如何,这将是最容易实现的,我可以为此推出自己的类并实现我需要的功能,但如果标准库中已经有类似的东西,那又何必呢。
那么基本上,STL 中是否存在子字符串类型的类?
解决方法
是的,从 C++17 开始,你有 std::string_view
。
示例:
#include <iostream>
#include <string>
#include <string_view>
int main() {
std::string foo = "Hello world";
std::string_view a(foo.c_str(),5);
std::string_view b(foo.c_str() + 6,5);
std::cout << a << '\n' // prints Hello
<< b << '\n'; // prints world
}
,
这就是使用 std::string_view
而不是 std::string
非常有利于减少那些原始字符串的副本并能够使用 std::string_view::substr
的地方。
字符串视图不是复制您正在操作的字符串,而是为底层字符串提供视图——几乎只是指向字符串开头和大小的指针。 >
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。