std::string转std::string_view的时间复杂度
Time complexity of converting std::string to std::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;
}
创建 string_view sV 的时间复杂度是否与字符串 s 中的字符数成线性关系,还是与字符串 s 的长度无关?同样,构造sVTwo的时间复杂度是线性的还是常量取决于字符串中有多少个字符?
我感到困惑的原因是我在这里无法分辨这些构造函数中的哪一个:https://en.cppreference.com/w/cpp/string/basic_string_view/basic_string_view 被用于构造字符串。
Is the time complexity of creating the string_view sV linear relative
to the number of chars in the string s or is it irrelevant how long
the string s is?
string_view(s)
将调用 string
的 operator std::string_view()
,这相当于 return string_view(data(), size())
,并且由于 string
的 data()
和size()
都是O(1)
,所以复杂度与字符串的长度无关。
Likewise, is the time complexity of the construction of sVTwo linear
or constant depending on how many chars are in the string?
它将调用string_view(It first, End last)
并使用std::to_address(first)
和last - first
来初始化string_view
的成员变量。由于前者和指针运算都是常数时间,所以这也是常数时间。请注意,此函数是在 C++20 中引入的,在 C++17 中调用 string_view(begin(s), end(s))
是错误格式的。
最小可重现示例:
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 被用于构造字符串。
Is the time complexity of creating the string_view sV linear relative to the number of chars in the string s or is it irrelevant how long the string s is?
string_view(s)
将调用 string
的 operator std::string_view()
,这相当于 return string_view(data(), size())
,并且由于 string
的 data()
和size()
都是O(1)
,所以复杂度与字符串的长度无关。
Likewise, is the time complexity of the construction of sVTwo linear or constant depending on how many chars are in the string?
它将调用string_view(It first, End last)
并使用std::to_address(first)
和last - first
来初始化string_view
的成员变量。由于前者和指针运算都是常数时间,所以这也是常数时间。请注意,此函数是在 C++20 中引入的,在 C++17 中调用 string_view(begin(s), end(s))
是错误格式的。