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

时间:2015-07-25 16:58:53

标签: c++ string size time-complexity string-length

length()返回字符串中的字符数,size()返回size_t,它也是相同的,但用于使其与其他STL容器保持一致。

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

size()也一样吗?

或者可以在O(1)时间内直接计算变量的大小?

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

4 个答案:

答案 0 :(得分:7)

两者都具有相同的复杂性:常量。

根据N4431工作草案,§21.4.4

  

size_type size() const noexcept;

     

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

  

size_type length() const noexcept;

     

返回:size()。

  

[...]遍历所有字符并计算长度[...]

这是你想到的C字符串。

答案 1 :(得分:3)

如果您查看文档here,则表示lengthsize相同。

  

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);
    }

答案 2 :(得分:0)

它们是等价的。此外,字符串在返回大小时不计算字符数,即字符数组,如果字符串始终计算字符,则它们将太慢。

答案 3 :(得分:0)

C++ 中字符串的两个函数完全相同,并且返回字符串中的字符数,不包括任何空终止符。

source

来源:basic_string.h