std :: string length()和size()成员函数


263

我正在阅读此问题的答案,发现实际上有一个方法被要求length()使用std::string(我一直使用size())。在std::string课堂上使用此方法是否有任何特定原因?我同时阅读了MSDN和CppRefernce,它们似乎表明size()和之间没有区别length()。如果是这样,这是否会使该类的用户感到困惑?

Answers:


340

根据文档,这些只是同义词。 size()在那里,以便与其他STL容器(如一致vectormap),并length()是要与大多数人的字符串的直观概念是一致的。人们通常谈论的是单词,句子或段落的长度,而不是其大小,因此length()可以使内容更具可读性。


9
同意 当我编写模板类和函数时,我宁愿使用size()(以防我曾经使用非字符串类),但是大多数时候我都使用length()纯字符串。
Marius 2010年

3
size()是否不返回内存中字符串的大小(以字节为单位),而length()不返回字符数,由于1 char = 1个字节而恰好是巧合的吗?
Boyan Kushlev '16

4
不。它们具有相同的功能;他们甚至共享文档:en.cppreference.com/w/cpp/string/basic_string/size
Todd Gamblin

4
它们都被定义为等效于distance(s.begin(),s.end()),其中begin()和end()是CharT元素上的迭代器。CharT是一个模板参数,它确定字符串中的内容。对于std :: string,CharT为char。对于std :: wstring,CharT为wchar_t,通常为2或4个字节。即使在那里,无论是长度()和大小()将返回的数量字符的字符串,而不是字节数。
Todd Gamblin

5
您必须忘记,有时人们会使用std :: string来存储UTF8字符串。并且utf8字符串是可变长度编码,因此您不能使用length()或size()来获取字符串字符的计数。实际上,它们只是返回元素的计数:std::string=> std::bacsic_string<char> count of char std::wstring => std::basic_string<wchar_t> count of wchar_t.
光泽田

16

Ruby也是一样,顺便说一句,它为数组和散列中的项目数量同时提供#length #size作为同义词(C ++仅对字符串提供)。

极简主义者和相信“应该有一个,并且理想情况下只有一个明显的方法”的人(正如Python的Zen所言),我想大多数人会同意@Naveen的疑问,而Perl的粉丝有多种方法可以做到这一点”(或者SQL的语法带有不计其数的可选“噪音词”,给出了无数相同等价的句法形式来表达一个概念)无疑会抱怨Ruby,尤其是C ++,只是走的太远了提供这样的同义词冗余就足够了;-)。


9
在这种情况下,这是免费的。Perl的语法和用法使您可以使用任何喜欢的样式来表达事物。同一件事有两个不同的单词只会使在Stackoverflow中很难找到搜索词。
Adrian Ratnapala 2012年

0

使用编码练习工具(LeetCode)时,似乎size()比length()快(尽管基本上可以忽略不计)


-10

字符串的长度==字符串具有多少位,大小==这些位的大小,如果编辑器分配的字符大小为1个字节,则字符串中的两个都相同


7
不正确的答案。请参阅已接受答案中链接的文档。
Stefan de Kok
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.