哪个更快的C++ String length()或size()?

ron*_*ilp 0 c++ string size string-length time-complexity

length()返回字符串中的字符数并size()返回一个size_t也是相同但用于使其与其他STL容器一致的字符数.

对于计算length(),字符串遍历所有字符并计算长度.所以,O(n)时间.

是否size()也一样呢?

或者可以及时直接计算变量的大小O(1)

所以,我的问题是,它们在速度方面是否相同(如计算它们的方式)还是在O(1)时间上计算尺寸?

Jak*_*nda 14

如果您查看此处的文档它会说length并且size是相同的。

string::size 和 string::length 都是同义词并返回相同的值。

此外,如果您查看代码,长度已缓存,因此复杂度为O(1). (来自 MS 实现的代码,但我确信其他库也是如此。)

size_type length() const _NOEXCEPT
    {   // return length of sequence
    return (this->_Mysize);
    }

size_type size() const _NOEXCEPT
    {   // return length of sequence
    return (this->_Mysize);
    }
Run Code Online (Sandbox Code Playgroud)


Dan*_*our 7

两者都具有相同的复杂性:常数.

根据N4431工作草案,§21.4.4

size_type size() const noexcept;

返回:字符串中当前字符串对象数的计数.复杂性:恒定时间.

size_type length() const noexcept;

返回:size().


[...]遍历所有角色并计算长度[...]

那是你想到的C字符串.