length()
返回字符串中的字符数,size()
返回size_t
,它也是相同的,但用于使其与其他STL容器保持一致。
对于计算length()
,字符串遍历所有字符并计算长度。所以,O(n)
时间。
size()
也一样吗?
或者可以在O(1)
时间内直接计算变量的大小?
所以,我的问题是,它们在速度(如计算方式)方面是相同的还是在O(1)
时间内计算的大小?
答案 0 :(得分:7)
两者都具有相同的复杂性:常量。
根据N4431工作草案,§21.4.4
size_type size() const noexcept;
返回:字符串中当前字符串对象数的计数。复杂性:恒定时间。
和
size_type length() const noexcept;
返回:size()。
[...]遍历所有字符并计算长度[...]
这是你想到的C字符串。
答案 1 :(得分:3)
如果您查看文档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 :(得分:0)
它们是等价的。此外,字符串在返回大小时不计算字符数,即字符数组,如果字符串始终计算字符,则它们将太慢。
答案 3 :(得分:0)