C++ std::string::length 或 std::string::size 哪个更快? [重复]

问题描述 投票:0回答:4

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

为了计算

length()
,字符串会迭代所有字符并计算长度。所以,
O(n)
时间。

size()
也一样吗?

或者可以在

O(1)
时间内直接计算变量的大小吗?

所以,我的问题是,它们在速度方面是否相同(如它们的计算方式),或者大小是在

O(1)
时间内计算的?

c++ string size time-complexity string-length
4个回答
36
投票

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

摘自 N4431 工作草案,§21.4.4

size_type size() const noexcept;

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

还有

size_type length() const noexcept;

返回:size()。


[...] 迭代所有字符并计算长度 [...]

这就是您想到的 C 弦。


18
投票

如果您查看文档here,它会说

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

2
投票

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

来源:basic_string.h


0
投票

它们是等价的。另外,字符串在返回大小时不计算字符,这是字符数组,如果字符串总是计算字符那么它们会太慢。

© www.soinside.com 2019 - 2024. All rights reserved.