Con*_*nst 5 c++ stdstring string-view c++17
可以很容易地std::string_view从 a创建一个std::string。但是如果我想创建一个范围的字符串视图,std::string使用迭代器是std::string行不通的。
这是我尝试过的代码:https : //gcc.godbolt.org/z/xrodd8PMq
#include <iostream>
#include <string>
#include <string_view>
#include <iterator>
int main()
{
std::string str{"My String"};
std::string_view strView{str}; // works
//std::string_view strSubView{str.begin(), str.begin() + 2}; // error
}
Run Code Online (Sandbox Code Playgroud)
当然,也许我们可以将子字符串制作出来str并用于制作字符串视图strSubView,但是还有一个额外的字符串创建。
我发现std::basic_string_view第 5 个构造函数采用迭代器的范围。
template<class It, class End>
constexpr basic_string_view(It first, End last);
Run Code Online (Sandbox Code Playgroud)
但它仅仅是std::stringor std::basic_string_view本身的迭代器吗?如果不是 forstd::string迭代为什么我们不应该有一个,毕竟是字符串视图:
描述了一个对象,它可以引用一个常量连续的类似字符的对象序列!
取char连续序列的范围,不应该算吗?
该构造函数已添加到 C++20 中。如果您使用 C++17 编译器进行编译,则它不存在。
您可以编写一个执行相同操作的函数
std::string_view range_to_view(std::string::iterator first, std::string::iterator last) {
return first != last ? { first.operator->(), last - first } : { nullptr, 0 };
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
93 次 |
| 最近记录: |