📜  C++17 中的类 std::string_view(1)

📅  最后修改于: 2023-12-03 15:14:01.823000             🧑  作者: Mango

C++17 中的类 std::string_view

简介

std::string_view 是 C++17 中新增的一个类,它用于表示一个字符串的只读视图,可以看成是一个轻量级的字符串引用,可以避免在一些场景中频繁地进行字符串复制,从而节省时间和内存。不仅仅是字符串,std::string_view 也可以用于表示一个字符序列的只读视图,比如一个字符数组。

用法

std::string_view 的使用方法与 std::string 很相似,支持大多数 std::string 的成员函数,比如:

  • length():返回字符串的长度,与 size() 作用相同。
  • empty():判断字符串是否为空,若为空返回 true。
  • operator[]:可以按下标访问字符串中的字符,与 std::string 的用法相同。
  • front():返回字符串的第一个字符。
  • back():返回字符串的最后一个字符。
  • data():返回字符串的指针,指向首字符。

std::string_view 中,由于是只读视图,因此不支持改变字符串内容的函数,比如 operator[] 的重载版本。

除此之外,std::string_view 还新增了一些新的成员函数,比如:

  • substr():用于截取一个子串,返回一个新的只读视图。
  • remove_prefix():用于去掉字符串的前缀。
  • remove_suffix():用于去掉字符串的后缀。
代码示例

下面是一个简单的使用示例:

#include <iostream>
#include <string_view>

int main()
{
    std::string_view sv("hello world");
    std::cout << sv << '\n';            // hello world
    std::cout << sv.length() << '\n';   // 11

    // 截取子串
    auto sv2 = sv.substr(6, 5);
    std::cout << sv2 << '\n';           // world

    // 去掉前缀和后缀
    sv.remove_prefix(6);
    sv.remove_suffix(1);
    std::cout << sv << '\n';            // world

    return 0;
}
总结

以上就是 std::string_view 的简单介绍和使用方法。相较于传统的字符串操作,std::string_view 提供了更加高效的方式,避免了频繁的内存分配和复制,适用于各种场景下对字符串的只读访问,比如函数参数传递、循环迭代等等。