length()
返回字符串中的字符数,size()
返回size_t
,它也是相同的,但用于使其与其他STL容器保持一致。
为了计算
length()
,字符串会迭代所有字符并计算长度。所以,O(n)
时间。
size()
也一样吗?
或者可以在
O(1)
时间内直接计算变量的大小吗?
所以,我的问题是,它们在速度方面是否相同(如它们的计算方式),或者大小是在
O(1)
时间内计算的?
两者具有相同的复杂性:常数。
摘自 N4431 工作草案,§21.4.4
size_type size() const noexcept;
返回:字符串中当前类字符对象的数量。复杂性:恒定时间。
还有
size_type length() const noexcept;
返回:size()。
[...] 迭代所有字符并计算长度 [...]
这就是您想到的 C 弦。
如果您查看文档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);
}
它们是等价的。另外,字符串在返回大小时不计算字符,这是字符数组,如果字符串总是计算字符那么它们会太慢。