Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ std::string length()和size()成员函数_C++_String_Stl_Size - Fatal编程技术网

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

C++ std::string length()和size()成员函数,c++,string,stl,size,C++,String,Stl,Size,我正在阅读这个问题的答案,发现实际上有一个方法叫做length(),用于std::string(我总是使用size())。在std::string类中使用此方法有什么具体原因吗?我读了MSDN和CPPreference,它们似乎表明size()和length()之间没有区别。如果是这样的话,是不是会让类的用户更加困惑?根据,这些只是同义词size()与其他STL容器(如vector,map等)保持一致,length()与大多数人对字符串的直观概念保持一致。人们通常谈论一个单词、句子或段落的长度,

我正在阅读这个问题的答案,发现实际上有一个方法叫做
length()
,用于
std::string
(我总是使用
size()
)。在
std::string
类中使用此方法有什么具体原因吗?我读了MSDN和CPPreference,它们似乎表明
size()
length()
之间没有区别。如果是这样的话,是不是会让类的用户更加困惑?

根据,这些只是同义词
size()
与其他STL容器(如
vector
map
等)保持一致,
length()
与大多数人对字符串的直观概念保持一致。人们通常谈论一个单词、句子或段落的长度,而不是它的大小,因此
length()
是为了让事情更可读。

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


我想,极简主义者和那些相信“应该有一种,理想情况下只有一种明显的方法”的人(就像Python的禅宗所说的那样)大多数都会同意你的怀疑,@Naveen,而Perl的“有多种方法可以做到”(或者SQL的语法中有无数可选的“噪音词”)的粉丝们给出了许多等同的语法形式来表达一个概念,无疑会抱怨Ruby,尤其是C++,在提供这样的同义冗余时,远远不够。p> 字符串长度==该字符串有多少位, size==这些位的大小,
在字符串中,如果编辑器在使用编码实践工具(LeetCode)时将字符大小分配为1字节,则两者都是相同的。似乎size()比length()快(虽然基本上可以忽略不计)

同意。当我编写模板类和函数时,我宁愿使用
size()
(以防我使用非字符串类),但大多数时候我在处理普通字符串时使用
length()
。size()不返回内存中字符串的大小(字节),而length()返回字符数,哪一个恰好重合,因为1个字符=1个字节?不,它们是相同的函数;它们甚至共享文档:。它们都被定义为等同于距离(s.begin()、s.end()),其中begin()和end()是图表元素的迭代器。图表是一个模板参数,用于确定字符串中的内容。对于std::string,图表是char。对于std::wstring,图表是wchar\u t,通常为2或4个字节。即使在那里,length()和size()都将返回字符串中的字符数,而不是字节数。您必须忘记,有时人们会使用std::string来存储UTF8字符串。而utf8字符串是可变长度编码,则不能使用length()或size()来获取字符串字符的计数。实际上,它们只返回元素的计数:
std::string=>std::bacsic\u char字符串计数
std::wstring=>std::basic\u wchar\u t字符串计数。
在这种情况下是免费的。Perl的语法和用法允许您使用您喜欢的任何样式来表达内容。同一事物有两个不同的词只会使在Stackoverflow中很难找到搜索词。回答不正确。请参阅已接受答案中链接的文档。看起来与我非常相似!