SORU
4 Mart 2009, ÇARŞAMBA


C verimli dize birleştirme

Birkaç kişi hakkında endişeler ifade duydum "" std operatörü::string ve çeşitli geçici çözümler birleştirmeyi hızlandırmak için. Bu herhangi gerçekten gerekli mi? Eğer öyleyse, C dizeleri bitiştirmek için en iyi yolu nedir ?

CEVAP
4 Mart 2009, ÇARŞAMBA


Ek iş muhtemelen buna değer değil, gerçekten verimli lazım tabii.Muhtemelen çok daha iyi sadece operatör = yerine kullanarak verim elde edecekler.

Şimdi bu Yasal Uyarı sonra, asıl soruna cevap vereyim...

STL string sınıfı verimliliğini kullanarak STL uygulanmasına bağlıdır.

Olabilirverimliliği garantivedaha fazla kontrol varel ile birleştirme c-yerleşik işlevler üzerinden yaparak kendinize.

Neden operatör verimli değildir

Ara: bir göz atın

template <class charT, class traits, class Alloc>
basic_string<charT, traits, Alloc>
operator (const basic_string<charT, traits, Alloc>& s1,
          const basic_string<charT, traits, Alloc>& s2)

Yeni bir nesne her sonra döndürülen görebilirsiniz . Yeni bir tampon her zaman kullanıldığı anlamına gelir. Eğer ekstra işlemler bir ton yapıyorsanız verimli değildir.

Neden bunu daha verimli hale getirmek

  • Bu verimli yapmak için bir temsilci güvenmek yerine verimliliği garanti
  • std::string sınıfı için bitiştirmek olacak ne dize, ne de max boyutu hakkında hiçbir şey bilmiyor. Bu bilgiye sahip olabilir ve bir şeyleri bu bilgiye sahip dayalı. Bu daha az yeniden ayırmalarını sağlayacaktır.
  • El ile tamponlar kontrol edileceği bunun olmasını istemiyorsanız yeni tamponlar içine tüm dize kopya olmayacak emin olabilirsiniz.
  • Çok daha verimli olan öbek yerine arabellekleri için yığın kullanabilirsiniz.
  • string operatör yeni bir string nesnesi oluşturun ve bu nedenle yeni bir tampon kullanarak geri dönecek.

Uygulama için dikkat edilmesi gereken noktalar:

  • Dize uzunluğu takip edin.
  • Bir dizenin sonuna bulmak için mahsup dize ve başlangıç için bir işaretçi tutmak, ya da sadece başlangıç ve başlangıç uzunluğu.
  • Senin dize depolama arabelleği yeniden ayırmak için veri gerek yok yani yeterince büyük olduğundan emin olun
  • Uzunluğu dize dize sonuna bulmak için yinelemek gerek yok yani strcpy yerine strcat kullanın.

İp veri yapısı:

Eğer gerçekten hızlı ihtiyacınız varsa birbirine bağlanması rope data structure bir kullanmayı düşünün.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BiGSH0TROB

    BiGSH0TROB

    7 NİSAN 2011
  • dougownsall

    dougownsall

    7 EKİM 2007