Bence STL ağacı olmamasının birkaç nedeni var. Öncelikle Ağaçlar, bir kap (liste, vektör, set) gibi, doğru seçimleri zorlaştıran çok farklı ince yapıya sahip bir özyinelemeli veri yapısı biçimidir. Ayrıca STL kullanarak temel formda inşa etmek çok kolaydır.
Sonlu bir köklü ağaç, değeri veya yükü olan bir kap, örneğin bir A sınıfı örneği ve muhtemelen boş köklü (alt) ağaçlardan oluşan bir koleksiyon olarak düşünülebilir; ağaçların boş koleksiyonuna sahip ağaçlar yaprak olarak düşünülür.
template<class A>
struct unordered_tree : std::set<unordered_tree>, A
{};
template<class A>
struct b_tree : std::vector<b_tree>, A
{};
template<class A>
struct planar_tree : std::list<planar_tree>, A
{};
Yineleyici tasarım vb. Hakkında biraz düşünmek gerekir ve ağaçlar arasında hangi ürün ve yardımcı ürün işlemlerini tanımlamaya ve verimli olmaya izin verir - ve orijinal STL iyi yazılmalıdır - böylece boş set, vektör veya liste kabı varsayılan durumda herhangi bir yükü gerçekten boş.
Ağaçlar pek çok matematiksel yapıda önemli bir rol oynar (Kasap, Grossman ve Larsen'in klasik belgelerine bakın; ayrıca birleştirilebilecekleri örnekleri ve nasıl numaralandırıldıklarına dair Connes ve Kriemer makaleleri). Rollerinin sadece diğer bazı operasyonları kolaylaştırmak olduğunu düşünmek doğru değildir. Aksine, veri yapısı olarak temel rolleri nedeniyle bu görevleri kolaylaştırırlar.
Ancak, ağaçlara ek olarak "ortak ağaçlar" da vardır; her şeyden önce ağaçların kökleri silerseniz her şeyi sildiğiniz özelliği vardır.
Ağaçtaki yineleyicileri düşünün, muhtemelen basit bir yineleyici yığını, bir düğüme ve ebeveynine, köküne kadar gerçekleştirileceklerdi.
template<class TREE>
struct node_iterator : std::stack<TREE::iterator>{
operator*() {return *back();}
...};
Ancak, istediğiniz kadarına sahip olabilirsiniz; topluca bir "ağaç" oluştururlar, ancak tüm okların köke doğru aktığı yerde, bu ortak ağaç yineleyiciler aracılığıyla önemsiz yineleyici ve köke doğru tekrarlanabilir; ancak, diğer tüm yineleyiciler tarafından bilinemez) ve tüm örneklerin izlenmesi dışında yineleyiciler topluluğu silinemez.
Ağaçlar inanılmaz derecede faydalı, çok fazla yapıya sahipler, bu kesinlikle doğru yaklaşımı elde etmek için ciddi bir zorluk haline getiriyor. Bence bu yüzden STL'de uygulanmadılar. Dahası, geçmişte, insanların dindar olduklarını gördüm ve kendi türünün zorlayıcı örneklerini içeren bir tür kap fikrini buldum - ama yüzleşmek zorundalar - bu bir ağaç türünün temsil ettiği şeydir - bir muhtemelen (küçük) ağaçların boş koleksiyonu. Geçerli dil, varsayılan container<B>
kurucunun öbek (veya başka bir yerde) için bir alan B
vb.
Bu, iyi bir biçimde, standarda doğru yolunu bulsaydı, memnun olurum.