最小可重現示例:
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用于構造字串。
uj5u.com熱心網友回復:
創建 string_view sV 的時間復雜度與字串 s 中的字符數呈線性關系還是與字串 s 的長度無關?
string_view(s)將呼叫string's operator std::string_view(),它等價于return string_view(data(), size()), 并且因為string'sdata()和size()are both 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 中呼叫是格式錯誤的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/321782.html
