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

Nav*_*een 240 c++ string size stl

我正在阅读这个问题的答案,发现实际上有一个方法length()需要std::string(我总是使用size()).在std::string课堂上有这种方法有什么特别的原因吗?我读过MSDN和CppRefernce,它们似乎表明size()和之间没有区别length().如果是这样的话,是不是让这个班级的用户更加困惑?

Tod*_*lin 316

根据文档,这些只是同义词. size()在那里,以便与其他STL容器(如一致vector,map,),并length()是要与大多数人的字符串的直观概念是一致的.人们通常谈论一个单词,句子或段落的长度,而不是它的大小,所以length()是为了让事情更具可读性.

  • 同意.当我编写模板类和函数时,我宁愿使用`size()`(如果我使用非字符串类),但大多数时候我使用`length()`来处理普通字符串时. (9认同)
  • 它们都被定义为等于distance(s.begin(),s.end()),其中begin()和end()是CharT元素上的迭代器.CharT是一个模板参数,用于确定字符串中的内容.对于std :: string,CharT是char.对于std :: wstring,CharT是wchar_t,通常为2或4个字节.即使在那里,length()和size()都将返回字符串中*字符*的数量,而不是字节数. (4认同)
  • 你必须忘记有时人们会使用std :: string存储**UTF8**字符串.并且utf8字符串是**可变长度编码**,那么你不能使用length()或size()来获取字符串字符的计数.实际上他们只返回元素的计数:`std :: string => std :: bacsic_string <char> char的计数`std :: wstring => std :: basic_string <wchar_t> wchar_t的计数. (4认同)
  • size()不返回内存中字符串的大小(以字节为单位),而length()返回的字符数恰好恰好相同,因为1 char = 1 byte? (3认同)
  • 不,它们功能相同; 他们甚至共享文档:http://en.cppreference.com/w/cpp/string/basic_string/size. (3认同)
  • 我会避免使用 length() ,因为在不知道编码是什么的情况下,这个概念完全没有意义。我可能有长度为 10 的字符串,但这并不意味着其中有 10 个可打印字符。 (2认同)

Ale*_*lli 16

Ruby也是一样的,btw,提供数组和散列中的项目数量的同义词#length #size同义词(C++仅用于字符串).

我认为,极简主义者和那些相信"应该只有一个,理想情况下只有一个,显而易见的方式"(就像禅宗的吟诵)的人,大多会同意你的怀疑,@ Naveen,而Perl的粉丝"有不止一种方法可以做到这一点"(或SQL语法中包含大量可选的"噪音词",给出了相同的语法形式来表达一个概念)毫无疑问会抱怨Ruby,特别是C++,不会走得太远足以提供这种同义冗余;-).

  • 在这种情况下,它是无偿的.Perl的语法和用法让您可以使用您喜欢的任何风格来表达事物.对同一事物使用两个不同的单词只会使得难以在Stackoverflow中提出搜索项. (9认同)