template<class _CharT, class _Traits>
class basic_string_view;
basic_string_view提供对字符串的只读访问,它并不占有对字符串的所有权,提供对字符串轻量和安全的访问。从实现上来说,basic_string_view只包含指向字符串的指针以及字符串的大小。标准库中定义的字符串视图类型有:
std::string_view std::basic_string_view<char>
std::wstring_view std::basic_string_view<wchar_t>
std::u8string_view std::basic_string_view<char8_t>
std::u16string_view std::basic_string_view<char16_t>
std::u32string_view std::basic_string_view<char32_t>
本文章的代码库为:
https://gitee.com/gamestorm577/CppStd
构造和赋值
构造函数
可以用basic_string_view、字符串以及迭代器来构造一个basic_string_view。默认构造函数构造一个空的字符串视图。由于basic_string类型可以隐式地转换为basic_string_view类型,所有也可以用一个basic_string来构造basic_string_view。代码示例:
char tmp1[] = "abcde";
std::string tmp2 = "12345";
std::string_view str_view1;
std::string_view str_view2(tmp1);
std::string_view str_view3(tmp1, 3);
std::string_view str_view4(str_view3);
std::string_view str_view5(tmp2.begin(), tmp2.begin() + 3);
std::string_view str_view6(tmp2);
std::cout << "str_view1 = " << str_view1 << std::endl;
std::cout << "str_view2 = " << str_view2 << std::endl;
std::cout << "str_view3 = " << str_view3 << std::endl;
std::cout << "str_view4 = " << str_view4 << std::endl;
std::cout << "str_view5 = " << str_view5 << std::endl;
std::cout << "str_view6 = " << str_view6 << std::endl;
输出结果为:
str_view1 =
str_view2 = abcde
str_view3 = abc
str_view4 = abc
str_view5 = 123
str_view6 = 12345
赋值函数
可以用basic_string_view或者basic_string来赋值basic_string_view。代码示例:
std::string tmp = "12345";
std::string_view view1 = tmp;
std::string_view view2 = view1;
std::cout << "view1 = " << view1 << std::endl;
std::cout << "view2 = " << view2 << std::endl;
输出结果:
view1 = 12345
view2 = 12345
迭代器
接口begin、cbegin指向basic_string_view起始的迭代器,end、cend指向末尾的迭代器。rbegin、crbegin指向起始的逆向迭代器,rend、crend指向末尾的逆向迭代器。代码示例为:
std::string_view view("abcdef", 3);
for (auto iter = view.begin(); iter != view.end(); ++iter)
{
std::cout << *iter << std::endl;
}
输出结果为:
a
b
c
元素访问
operator[]
返回指定位置的字符。示例代码:
std::string_view view("1234567");
char c = view[2];
std::cout << "c = " << c << std::endl;
输出结果:
c = 3
at
返回指定位置的字符。示例代码:
std::string_view view("1234567");
char c = view.at(2);
std::cout << "c = " << c << std::endl;
输出结果:
c = 3
front
返回首个字符。示例代码:
std::string_view view("1234567");
char c = view.front();
std::cout << "c = " << c << std::endl;
输出结果:
c = 1</