Yineleyiciler C++ 's STL'de nasıl çalışırlar diye merak ettim. Setin ikili arama ağacı kullanılarak gerçekleştirildiğini tahmin ediyorum, yani yineleyiciler bu ağacın geçişini yapıyor demektir. Ama benim sorum şu ki, ne zaman onlar gibi yaptığımız bu geçişi yaparlar, ve s =() gibi iç içe geçmiş imleçleri depolamak ve her artışta sadece bu veri yapısını belirtmek Yineleyicideki veya yineleyicideki artış ağacın üzerinde yeni bir harekette geçiş yapar. BizSette yineleyici nasıl çalışır
set<int> s;
set<int>::iterator it;
//and then use it like:
for(it = s.begin(); it!=s.end();)
{
dosth();
++it; // does this do a inorder traversal of the tree again to find the next
// node or it gets the next node in the tree by reading the internal
// data structure(of inorder traversal) which is created when we do s.begin().
}
Cevabınız için teşekkürler .... ama soruyu başka bir şekilde koymama izin verin .. eğer sizden istenirse std :: setindeki yineleyicilerin artış işlemlerini nasıl uygularsınız? Bağlantılı liste yerine ikili arama ağacını kullanarak ... her seferinde her seferinde bu ağacın sırasını değiştirir misiniz? ++ ... Eğer siparişi düzenli olarak kaydedecek ve bunu yaptığınız her seferinde buna değecektir ++ – raja
@raja: Basit bir bağlantılı liste kullanarak std :: set 'uygulayamazsınız. Bir kümede bir eleman bulmak O (log N) olmalıdır, ancak bağlantılı bir listede bir eleman bulmak O (N) 'dir. Bu mutlaka bir ağaçtır. Bir ağaç düğümü, üst düğümünde bir işaretçi tutarsa, "++ ++", tam bir ağaç geçişi olmadan her zaman bir sonraki en yüksek değeri bulabilir. – MSalters