use*_*940 2 c++ string string-view
最小可重复示例:
using namespace std;
#include<string>
#include<string_view>
#include<iostream>
int main()
{
string s = "someString";
string_view sV = string_view(s);
string_view sVTwo = string_view(begin(s), end(s));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
创建 string_view sV 的时间复杂度是否与字符串 s 中的字符数成线性关系,或者与字符串 s 的长度无关?同样,构造 sVTwo 的时间复杂度是线性的还是恒定的,取决于字符串中有多少个字符?
我感到困惑的原因是我无法分辨这里的哪些构造函数: https: //en.cppreference.com/w/cpp/string/basic_string_view/basic_string_view用于构造字符串。
创建 string_view sV 的时间复杂度是否与字符串 s 中的字符数成线性关系,或者与字符串 s 的长度无关?
string_view(s)会调用strings operator std::string_view(),它相当于return string_view(data(), size()), 并且由于stringsdata()和size()都是O(1),所以复杂度与字符串的长度无关。
同样,构造 sVTwo 的时间复杂度是线性的还是恒定的,取决于字符串中有多少个字符?
它将调用string_view(It first, End last)并使用std::to_address(first)和last - first来初始化 的string_view成员变量。由于前者和指针运算都是常数时间,所以这也是常数时间。请注意,该函数是在 C++20 中引入的,string_view(begin(s), end(s))在 C++17 中调用是格式错误的。