字符串库(2)-std::basic_string_view

本文围绕C++的basic_string_view展开,它提供对字符串的只读访问,不占有字符串所有权。文中详细介绍了其构造和赋值、迭代器、元素访问、容量、特殊值npos及各种操作等内容,还给出了相应代码示例及输出结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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</
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lucy_stone

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值