std :: string length () ve size () üye fonksiyonları


264

Bu sorunun cevaplarını okuyordum ve aslında (her zaman kullandım ) length()için çağrılan bir yöntem olduğunu std::stringgördüm size(). Bu yöntemin std::stringsınıfta olmasının belirli bir nedeni var mı ? Ben MSDN ve CppRefernce hem okumak ve onlar arasında hiçbir fark olduğunu gösterir gibi görünmektedir size()ve length(). Eğer öyleyse, sınıfın kullanıcısı için daha kafa karıştırıcı değil mi?

Yanıtlar:


341

Gereğince belgeleri , bunlar sadece eş anlamlıdır. size()Orada diğer STL kapları (gibi tutarlı olmak için olduğu vector, map, vb ) ve length()karakter dizeleri çoğu halkların sezgisel kavramı ile tutarlı olmaktır. İnsanlar genellikle bir kelime, cümle veya paragrafın uzunluğu hakkında değil, boyutu hakkında konuşurlar , bu yüzden length()işleri daha okunabilir hale getirmek için vardır.


9
Kabul. Şablon sınıfları ve işlevleri yazarken size()(dize olmayan sınıfları kullanmam durumunda) kullanmayı tercih ederim , ancak çoğu length()zaman düz dizelerle çalışırken kullanırım .
Marius

3
Size (), bellekteki dizgenin boyutunu (bayt cinsinden) döndürmez, length () ise, 1 karakter = 1 bayt olduğu için çakışan karakter sayısını döndürür?
Boyan Kushlev

4
Hayır. Aynı fonksiyonlar; belgeleri bile paylaşırlar: en.cppreference.com/w/cpp/string/basic_string/size .
Todd Gamblin

4
Her ikisi de begin () ve end () karakterlerinin CharT öğeleri üzerinde yineleyiciler olduğu uzaklık (s.begin (), s.end ()) ile eşdeğer olarak tanımlanır. CharT, dizede ne olduğunu belirleyen bir şablon parametresidir. Std :: string için CharT karakterdir. Std :: wstring için CharT, genellikle 2 veya 4 bayt olan wchar_t şeklindedir. Burada bile, length () ve size (), dizideki karakter sayısını değil, bayt sayısını döndürür.
Todd Gamblin

5
Bazen kullanıcılar UTF8 dizesini saklamak için std :: string kullanacaktır . ve utf8 dizesi değişken uzunluklu kodlama ise, dize karakterinin sayısını elde etmek için length () veya size () kullanamazsınız. Aslında sadece elementin sayısını döndürürler:std::string=> std::bacsic_string<char> count of char std::wstring => std::basic_string<wchar_t> count of wchar_t.
Sheen Tian

16

Ruby de aynı, btw, ikisini de sunuyor #length ve #size diziler ve sağlamalarının madde sayısına (C ++ sadece dizeleri yapar) eş anlamlısı olarak.

Minimalistler ve "bir tane olmalı ve ideal olarak bunu yapmanın sadece bir tane, açık bir yolu" olduğuna inanan insanlar (Python'un Zen'in okuduğu gibi), sanırım, çoğunlukla şüphelerinize katılıyorum, @Naveen, Perl'in hayranları " Bunu yapmanın birden fazla yolu var "(ya da SQL'in bir kavramı ifade etmek için aynı özdeş sözdizimsel formlar veren bazilyon isteğe bağlı" gürültü sözcükleri "ile sözdizimi) hiç şüphesiz Ruby ve özellikle C ++ 'dan şikayet etmeyecektir. böyle eşanlamlı artıklık sunmada yeterli ;-).


9
Bu durumda armağan edilir. Perl'in dilbilgisi ve kullanımı, hangi stili tercih ederseniz edin. Aynı şey için iki farklı kelimeye sahip olmak, Stackoverflow'da arama terimleri bulmayı zorlaştırır.
Adrian Ratnapala

0

Kodlama uygulama araçlarını (LeetCode) kullanırken, size () uzunluğundan () daha hızlı görünüyor (temelde ihmal edilebilir olsa da)


-10

dize uzunluğu == o dizenin kaç bitine sahip olduğunu, size == bu bitlerin boyutunu, Editör karakterin boyutunu 1 bayt tahsis ederse, dizelerin her ikisi de aynıdır


7
Yanlış cevap. Kabul edilen cevapta verilen belgelere bakın.
Stefan de Kok
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.