2015-08-02 26 views
7

Bazı C++ kaplarda (vektör, deque, liste, harita, set) baktı ve bunların hiçbiriNeden C++ kapları silme uygulamıyor (reverse_iterator position)?

erase(reverse_iterator position) 

bu answer anlatıldığı gibi reverse_iterator gelen yineleyici almanın bir yolu yoktur uygulamak olduğunu gördük.

Ancak yukarıdaki kapsayıcılar, reverse_iterator parametresiyle silme üye işlevini neden uygulamıyor?

Bu uygulamayı zorlaştıran veya başka bir nedenden dolayı uygulanmayan yineleyici ile reverse_iterator arasında önemli bir fark var mıdır?

+0

Yineleyici alan tüm yöntemlerde (sadece silme?) Tersine çevirici için varyasyon eklemek, yalnızca kazanç elde etmeyecek kamu yöntemlerinin sayısını artıracaktır (ve biraz gevşek olduğundan, daha fazla aşırı yüklenme olacak ve kullanıcının belirsiz çağrılardan kaçınması gerekecektir) . – Jarod42

cevap

4

Aynı soru, hemen hemen her konteyner işlevi hakkında sorulabilir: neden ters yineleyiciler için uygulanmadı? Cevap, ters yineleyicinin base() çağrısı üzerinden normal yineleyiciye kolayca dönüştürülebilmesidir. Her biri için bir "ters" versiyonunu uygulayarak, kullanıcı sayısının neredeyse iki katına çıkarılması yerine, base() numaralı telefonu çağırmanın yükünü yerleştirmek daha mantıklıdır. Bu kapları ters yineleyiciler ile işleyen dış ortamlarda kapların "genellik" ini bozduğunu iddia edebilir. Fakat en baştan itibaren ters yineleyiciler, "farklı" olarak tasarlanmışlardı ve her şeyden önce en önemsiz bağlamlarda normal yineleyicilerle uyumlu değildi.

İlgili konular