C++ 比较stl容器和数组?

C++ 比较stl容器和数组?,c++,stl,C++,Stl,在哪种情况下,与普通阵列相比,使用向量或集合(stl容器)是有利的?一个优势是,stl容器为您提供内存管理,并且与C型阵列相比,不太可能导致缓冲区溢出或内存泄漏。它们也是预制的,所以你不必花时间重新发明轮子。因此,每当您关心这些事情时,STL容器都是一个更好的选择。一个优点是,STL容器为您提供内存管理,与C型阵列相比,不太可能导致缓冲区溢出或内存泄漏。它们也是预制的,所以你不必花时间重新发明轮子。因此,每当您关心这些事情时,STL容器都是一个更好的选择。普通数组是静态对象:它们的大小在编译时固

在哪种情况下,与普通阵列相比,使用向量或集合(stl容器)是有利的?

一个优势是,stl容器为您提供内存管理,并且与C型阵列相比,不太可能导致缓冲区溢出或内存泄漏。它们也是预制的,所以你不必花时间重新发明轮子。因此,每当您关心这些事情时,STL容器都是一个更好的选择。

一个优点是,STL容器为您提供内存管理,与C型阵列相比,不太可能导致缓冲区溢出或内存泄漏。它们也是预制的,所以你不必花时间重新发明轮子。因此,每当您关心这些事情时,STL容器都是一个更好的选择。

普通数组是静态对象:它们的大小在编译时固定和确定Dynamic容器可以有任意数量的元素,这些元素可以在运行时更改

动态容器必须使用比静态数组更昂贵的内存分配操作。如果您需要一个动态容器,没有办法绕过它,但是如果静态数组就足够了,您可能更喜欢它(但是使用
std::array
!)

还请注意,具有自动存储的静态阵列通常不能太大,因为程序通常只有用于自动对象的有限内存

另一点是实用性:一些高级数据结构,如链表和二进制搜索树,只能作为动态容器在标准库中使用。如果您需要列表、队列或映射,即使它很小且大小有限,也可以随时使用动态容器,而标准库中没有静态模拟。(但是,由于标准容器所使用的分配器,可以通过使用池类型分配器将动态容器放入静态数组中。C++将对象生存期从内存生存期解耦)。

< P>“正常数组”是<强>静态< /强>对象:它们的大小是固定的,在编译时确定。strong>Dynamic
容器可以有任意数量的元素,这些元素可以在运行时更改

动态容器必须使用比静态数组更昂贵的内存分配操作。如果您需要一个动态容器,没有办法绕过它,但是如果静态数组就足够了,您可能更喜欢它(但是使用
std::array
!)

还请注意,具有自动存储的静态阵列通常不能太大,因为程序通常只有用于自动对象的有限内存


另一点是实用性:一些高级数据结构,如链表和二进制搜索树,只能作为动态容器在标准库中使用。如果您需要列表、队列或映射,即使它很小且大小有限,也可以随时使用动态容器,而标准库中没有静态模拟。(但是,由于标准容器所使用的分配器,您可以通过使用池类型分配器将动态容器放入静态数组中。C++将对象生存期从内存寿命中解耦)。code>set、multiset、vector、list、map、deque、stack、queue、priority\u queue、multimap、bitset都以不同的方式实现。这取决于你在做什么。有些是用平衡树实现的,有些是用连续数组实现的,有些是作为链表实现的,等等。有些插入速度更快,有些访问速度更快,有些删除效果更好,等等

没有一个容器总是对另一个有利,否则另一个就不存在了。软件开发的一部分是能够做出诸如“我应该使用哪个容器”之类的决策,那么您真正的问题是什么,您如何需要您的容器来发挥优势


显然,数组总是比向量快,因为向量的底层组件是数组,所以向量只会有开销。但是,这种开销为您带来了很多好处,这意味着您不必担心阵列带来的大量问题。

在哪些方面具有优势
set、multiset、vector、list、map、deque、stack、queue、priority\u queue、multimap、bitset都以不同的方式实现。这取决于你在做什么。有些是用平衡树实现的,有些是用连续数组实现的,有些是作为链表实现的,等等。有些插入速度更快,有些访问速度更快,有些删除效果更好,等等

没有一个容器总是对另一个有利,否则另一个就不存在了。软件开发的一部分是能够做出诸如“我应该使用哪个容器”之类的决策,那么您真正的问题是什么,您如何需要您的容器来发挥优势


显然,数组总是比向量快,因为向量的底层组件是数组,所以向量只会有开销。但是,这种开销为您带来了很多好处,这意味着您不必担心阵列带来的大量问题。

我认为几乎没有理由使用std::vector。deque具有所有优点(恒定时间访问等),但没有缺点(糟糕的性能)。唯一一次选择矢量而不是deque时,需要知道它是由一个真正的、老式的、C风格的数组支持的。唯一的原因是,如果需要将其传递到某个遗留函数(作为数组)中

与传统阵列相比,矢量阵列的优势是有限的。如果插入超过其当前大小,它将增长,但效率极低(有关更好的选项,请参阅std::deque)。索引向量的末尾和索引数组一样容易,因此没有任何好处。内存管理质量仅限于