intmain(){ std::string_view str {"hello world"}; for (auto it = std::begin(str); it != std::end(str); ++it) { std::cout << *it << " "; // h e l l o w o r l d } std::cout << '\n';
for (auto it = std::cbegin(str); it != std::cend(str); ++it) { std::cout << *it << " "; // h e l l o w o r l d } std::cout << '\n';
for (auto it = std::rbegin(str); it != std::rend(str); ++it) { std::cout << *it << " "; // d l r o w o l l e h } std::cout << '\n';
for (auto it = std::crbegin(str); it != std::crend(str); ++it) { std::cout << *it << " "; // d l r o w o l l e h } std::cout << '\n';
std::cout << std::size(str) << '\n'; // 11 // std::cout << std::ssize(str) << '\n'; // for c++ 20, get sign size std::cout << std::boolalpha << std::empty(str) << '\n'; // false std::cout << std::data(str) << '\n'; // hello world return0; }
basic_string_view 模板类
basic_string_view 和其他容器类一样,拥有一些类型成员
traits_type : Traits
value_type : charT
pointer : charT*
const_pointer : const charT*
reference : charT&
const_reference : const charT&
iterator
const_iterator
reverse_iterator
const_reverse_iterator
size_type : std::size_t
difference_type : std::ptrdiff_t
basic_string_view 中的迭代器函数
begin()
end()
cbegin()
cend()
rbegin()
rend()
crbegin()
crend()
#include<iostream> #include<string_view>
intmain(){ std::string_view str {"hello world"}; for (auto it = str.begin(); it != str.end(); ++it) { std::cout << *it << " "; // h e l l o w o r l d } std::cout << '\n';
for (auto it = str.cbegin(); it != str.cend(); ++it) { std::cout << *it << " "; // h e l l o w o r l d } std::cout << '\n';
for (auto it = str.rbegin(); it != str.rend(); ++it) { std::cout << *it << " "; // d l r o w o l l e h } std::cout << '\n';
for (auto it = str.crbegin(); it != str.crend(); ++it) { std::cout << *it << " "; // d l r o w o l l e h } std::cout << '\n'; return0; }
basic_string_view 中的获取函数和容量函数
operator[] : 获取索引对应的元素,当索引超出范围后为未定义行为,会报错
at : 获取指定元素,会进行范围检查
front : 获取第一个字符
back : 获取最后一个字符
data : 返回指向第一个字符的 view 指针
size : 返回 view 中字符的数量
length : 返回 view 中字符的数量
max_size : 返回字符的最大数量
empty : 检查 view 是否为空
#include<iostream> #include<string_view>
intmain(){ std::string_view str {"hello world"}; std::cout << str[4] << '\n'; // o // std::cout << str[13] << '\n'; // error: undefined behavior, do not throw std::cout << str.at(4) << '\n'; // o try { std::cout << str.at(13) << '\n'; } catch (const std::out_of_range& e) { std::cout << "index 13 out of range" << '\n'; // index 13 out of range std::cout << e.what() << '\n'; // invalid string_view position } std::cout << str.front() << '\n'; // h std::cout << str.back() << '\n'; // d std::cout << str.data() << '\n'; // hello world std::cout << str.size() << '\n'; // 11 std::cout << str.length() << '\n'; // 11 std::cout << str.max_size() << '\n'; // 2147483647 (2^31 - 1) std::cout << std::boolalpha << str.empty() << '\n'; // false return0; }