std :: string length () 및 size () 멤버 함수


264

나는 이것에 대한 답변 읽고 있던 질문을 실제로라는 방법이 발견 length()을 위해 std::string(내가 항상 사용 size()). 이 방법을 std::string수업에 사용 하는 특별한 이유가 있습니까? 내가 MSDN 및 CppRefernce 모두를 읽고, 그들 사이에는 차이가 없음을 시사 size()하고 length(). 그렇다면 클래스 사용자에게 더 혼란스럽지 않습니까?

답변:


341

당으로 문서 , 이건 그냥 동의어이다. size()거기에 다른 STL 컨테이너 (같은과 일치하는 것입니다 vector, map, ) 및은 length()문자열의 대부분의 사람들의 직관적 인 개념과 일치하는 것입니다. 사람들은 보통 단어가 아닌 단어, 문장 또는 단락의 길이 에 대해 이야기 하므로 length()더 읽기 쉽게 만들어야합니다.


9
동의했다. 템플릿 클래스와 함수를 작성할 때 size()(문자열이 아닌 클래스를 사용하는 경우) 오히려 length()일반 문자열로 작업 할 때 사용 합니다.
Marius

3
size ()는 메모리에서 문자열의 크기를 바이트 단위로 반환하지 않지만 length ()는 1 char = 1 바이트 이후 일치하는 문자 수를 반환합니까?
보얀 쿠 슬레 프

4
아닙니다. 같은 기능입니다. 그들은 심지어 문서를 공유합니다 : en.cppreference.com/w/cpp/string/basic_string/size .
토드 감 블린

4
둘 다 distance (s.begin (), s.end ())와 동일하게 정의됩니다. 여기서 begin () 및 end ()는 CharT 요소의 반복자입니다. CharT는 문자열의 내용을 결정하는 템플릿 매개 변수입니다. std :: string의 경우 CharT는 char입니다. std :: wstring의 경우 CharT는 wchar_t이며 일반적으로 2 또는 4 바이트입니다. 거기에서도 length ()와 size ()는 바이트 수가 아닌 문자열 의 문자 수를 반환합니다 .
토드 감 블린

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.
Sheen Tian

16

루비의 그냥 같은, BTW, 제공하는 모두 #length #size 배열과 해시의 항목 수 (C ++ 만이 문자열을 수행)의 동의어로.

"Phen의 선 (rec)이 암송하는 것처럼)"단 하나의 방법이 있어야한다 "고 믿는 미니멀리스트들과 사람들은 펄의 팬들은"Naveen "의 의심에 대부분 동의 할 것입니다. 그것을 할 수있는 방법은 여러 가지가 있습니다 "(또는 하나의 개념을 표현하기 위해 동일하게 동등한 구문 형태를 제공하는 bazillion 선택적인"노이즈 단어 "를 가진 SQL의 구문)는 Ruby, 특히 C ++가 멀지 않다고 불평 할 것입니다. 그러한 동의어 중복성 제공에 충분 ;-).


9
이 경우 무상입니다. Perl의 문법과 사용법을 통해 원하는 스타일을 사용하여 사물을 표현할 수 있습니다. 같은 것에 대해 두 개의 다른 단어를 사용하면 Stackoverflow에서 검색어를 찾기가 어려워집니다.
Adrian Ratnapala

0

코딩 연습 도구 (LeetCode)를 사용할 때 size ()가 length ()보다 빠릅니다 (기본적으로 무시할 만 함)


-10

문자열의 길이 == 문자열에 몇 개의 비트가 있는지, 크기 == 해당 비트의 크기, 편집기에서 문자 크기가 1 바이트 인 경우 문자열에서 둘 다 동일


7
오답. 허용 된 답변에 링크 된 설명서를 참조하십시오.
스테판 데 콕
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.