2009-05-07 23 views
8

Farz edelim ki yeni düğümlerin eklenmediği veya silinmediği bir listeyim var. Bununla birlikte, düğümler etrafa karıştırılabilir.Güvenli kayıt listesi :: iterator daha sonra kullanmak için?

Listede bir düğüme işaret eden bir iteratör kaydetmek ve daha sonra isteğe bağlı olarak erişmek güvenli midir?

Düzeltme (aşağıdaki soru): Listedeki belgeler :: splice() argüman listesinden öğeleri kaldırdığını söylüyor. Bu, ekleme eki olarak adlandırırsam, işlev için argüman olarak aynı listeyi kullanırsam, varolan yineleyicilerin geçersiz kılınacağı anlamına mı geliyor?

cevap

1

Evet, std::list yineleyiciler sadece düğüme işaret eden. Listedeki düğümleri ekleyebilir, silebilir (diğer düğümleri) ve düğümleri yeniden düzenleyebilir ve yineleyici geçersiz kılınamaz.

+9

Yineleyicinin bir işaretçi olduğu konusunda hiçbir garanti yoktur. Aslında, muhtemelen bir std :: list <> :: yineleyicisinin tüm yineleyici işlemlerinde (++ gibi) akıllı işlem yapması gerektiği için bir işaretçi olmadığını kabul edebilirsiniz. –

24

Evet.
Listeye yineleyici standart numaralar, işaret ettikleri (metaforik olarak konuşan) listeden çıkarılmadıkça geçersiz sayılmaz. Bu sayfadan

: http://www.sgi.com/tech/stl/List.html

Lists have the important property that insertion and splicing do not 
invalidate iterators to list elements, and that even removal invalidates 
only the iterators that point to the elements that are removed. 
İlgili konular