繁体   English   中英

C ++中的STL容器实际上是如何实现的..

[英]How are STL containers in C++ actually implemented..

我被问到这个问题很多。 我读过各种来源,包括Bjarne Stroustrup的书。 它表示该标准并未要求对STL容器进行任何实施。 但我还不清楚。 如果实现没有授权,是否意味着在我的代码中使用向量或列表时,它可能在不同的时间使用不同的数据结构? 如果是这样的话,如何决定在哪个时间使用哪种数据结构? 我的意思是,如果不修复所有STL容器每次都会使用特定的DS?

该标准没有规定应该使用哪些数据结构来实现STL容器,但它确实提供了复杂性保证,有时还提供其他保证(如使用连续内存的vector ),这通常会限制合理使用的数据结构的选择。实施少数选择。

它可能在不同的时间使用不同的数据结构?

是的,可能。 但我们需要明确定义“不同的时间”。 如果使用标准库实现I为平台P编译它,那么只要运行该程序,它将使用相同的数据结构。 如果更改P或I并重新编译,则可以使用其他数据结构。 “不同时间”由构建分隔。

如何决定在哪个时间使用哪种数据结构?

该标准强加了渐近复杂性要求,因此这是一个很大的标准。 除此之外,实现者可以在满足这些要求的不同数据结构之间进行选择。 由于实施者也了解平台,因此他们可能会选择在您构建的特定平台上表现更好的数据结构。

我的意思是,如果不修复所有STL容器每次都会使用特定的DS吗?

不会。如果有人明天提出一个非常酷和高效的数据结构,那么可以完全满足并超出某些标准库容器的要求呢? 如果数据结构在规范中设置固定,而不是复杂性,则不允许使用这种更好的实现。 直到C ++标准可能更新,这个过程可能需要数年时间。

软件工程是关于平衡规范和抽象。 您必须指定解决问题所需的内容,并抽象出与解决方案无关的详细信息。 如果过度指定,则会失去灵活性。 但要注意不要过度抽象而失去性能。 标准库是一个很好的案例研究,试图平衡两者。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM