c++ - 为什么我应该使用简单的数组而不是容器类?

标签 c++ arrays containers

什么(如果有的话)可以用数组而不是容器更有效地完成?

我最近了解了 C++ 标准容器类。它们具有明显的优势并解决了 C 风格数组的常见问题。 FAQ关于“为什么数组是邪恶的”的列表可以粗略地概括如下:

1. subscripts are not checked
2. often it is required to allocate memory from the heap
3. not easy to insert elements in the middle
4. always passed as reference

我想在很多情况下,人们可以忍受这些缺点。但是,我对这个问题有点困惑,使用数组而不是容器可以更有效/更轻松地完成什么?还是实际上没有那样的东西,我真的不应该再关心数组了?

最佳答案

"However, I am a bit puzzled about the question, what is it that can be done more efficient / easier with arrays rather than with containers?"

好吧,如果您指的是 c 风格的数组,在当前的 c++ 标准下,经典标准 c++ 容器类(例如 std: :vector) 恕我直言。它们依赖于具有可分配内存(使用 new()),这很可能是对您当前(操作系统/裸机)环境的限制,因为开箱即用。


现行标准规定std::array ,无需动态内存分配需求即可工作,但满足所有要求:

"1. subscripts are not checked"

std::array 进行下标检查

"2. often it is required to allocate memory from the heap"

这是客户端的选择,它实际上是用 std::array 分配的。 std::vector 无论如何都足以做到这一点。

"3. not easy to insert elements in the middle"

嗯,开箱即用的 std::array 不能很好地支持这一点。但同样,std::vector 和其他容器类也支持这一点(只要您的环境支持动态内存分配)

"4. always passed as reference"

std::array 很好地支持通过引用传递,并且比使用 c 样式数组可以(不能)实现的要好得多。


虽然可能有特殊情况,例如可重用对象实例池或享元对象实例,您可能想使用 placement new() 来解决运算符(operator)。此类解决方案的实现通常涉及您将对原始 C 风格数组进行操作。

关于c++ - 为什么我应该使用简单的数组而不是容器类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27513117/

相关文章:

c++ - 需要为赌场游戏创建一个函数

arrays - 如何在 Scala 中为数组中的每个元素附加一个字母

c++ - 将二维数组传递给函数

c# - 在 C# 中,如何在我的类中正确重载 Equals 运算符以便 Queue.Contains() 起作用?

c++ - 共享库中的静态类成员

c++ - GCC C++11 条件变量等待内部机制

javascript - 我可以将 JavaScript JSON.parse 与外部数组一起使用吗?

VNET 中的 Azure 容器实例如何获取 FQDN

c++ - 如何检测一个容器是否保证有序列存储

c++ - 参数 : Where are they declared?