for*_*818 2 c++ arrays containers
使用数组而不是容器可以更有效地完成什么(如果有的话)?
我最近了解了C++标准容器类.它们具有明显的优势并解决了C风格阵列的常见问题.该FAQ就"为什么数组是邪恶的"列表可以宽松地概括如下:
Run Code Online (Sandbox Code Playgroud)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
我想有很多情况,人们可以忍受这些缺点.但是,我对这个问题感到有些困惑,使用数组而不是容器可以更有效/更容易地完成什么?或者实际上没有这样的东西,我真的不应该关心数组?
"但是,我对这个问题感到有点困惑,用数组而不是容器可以更有效/更容易地做到这一点?"
好吧,如果你指的是c风格的数组,使用当前的c ++标准,那么经典的标准c ++容器类(例如std::vector)恕我直言的缺点就没有了.它们具有可分配内存(with new())的依赖性,这很可能是对当前(OS /裸机)环境的限制,因为它不是开箱即用的.
当前的标准规定std::array,无需动态内存分配需求,但满足所有声明:
"1.未检查下标"
std::array 做下标检查
"2.通常需要从堆中分配内存"
这是客户选择实际分配的地方std::array.std::vector无论如何都要做到这一点.
"3.不容易在中间插入元素"
嗯,std::array开箱即用,这一点得不到支持.但同样,std::vector其他容器类也支持这一点(只要您的环境支持动态内存分配)
"4.总是作为参考传递"
std::array 支持通过引用很好地传递,并且比使用c样式数组可以(不能)实现的要好得多.
虽然可能存在例如可重用对象实例池或flyweight对象实例的特殊情况,但您可能希望使用placementnew()操作符来解决.这些解决方案的实现通常会涉及到您将在原始c风格阵列上运行.