【发布时间】:2021-12-04 14:52:29
【问题描述】:
最小可重现示例:
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;
}
创建 string_view sV 的时间复杂度是否与字符串 s 中的字符数成线性关系,还是与字符串 s 的长度无关?同样,sVTwo 的构造时间复杂度是线性的还是常数取决于字符串中有多少个字符?
我感到困惑的原因是我无法在这里分辨出这些构造函数中的哪一个:https://en.cppreference.com/w/cpp/string/basic_string_view/basic_string_view 正在用于构造字符串。
【问题讨论】:
-
链接不是说复杂度是恒定的吗?
std::string知道自己的长度,因为它有一个constsize()函数。当使用原始的char *时,字符串的长度就起作用了,因为字符指针对字符串的长度一无所知,并且必须迭代直到达到空值。 -
它没有使用任何
string_view构造函数。它使用的是“stringtostring_view" conversion operator. -
Protip:永远不要将
using namespace std;放在#include指令之上,最好不要使用using namespace,而是导入特定的类型名称。
标签: c++ string string-view