什么(如果有的话)可以用数组而不是容器更有效地完成?
我最近了解了 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/