鉴于它提供的抽象,C++std::vector
尽可能高效:堆栈上的 3 个指针,以及动态分配的数据,在线性增长方案中平均每个元素重新分配 1 次(因为调整大小比按比例扩展容量,a 1.5 到 2 的因数)。
使用malloc()
and的 C 等价物realloc()
至少同样昂贵,而且更麻烦(手动调整大小等)。此外,std::vector
允许通过特殊分配器(基于池、堆栈分配等)进行用户定义的性能调整,这在 C++11 中并不像在 C++98 中那样难以使用。
如果您不需要动态调整大小,您可以用 C 和 C++ 编写静态数组(或std::array
C++)。
一般来说,对于高性能计算,C++ 具有更大的优化潜力,特别是通过使用可以内联的函数对象(与常规 C 函数指针相比)。典型的例子是排序
int comp( const void* a, const void* b ) {
return /* your comparison here */;
}
// C style sorting
qsort( arr, LARGE_SIZE, sizeof( int ), comp );
^^^^ <---- no-inlining through function pointer
// C++11 style sorting (use hand-made function object for C++98
std::sort(std::begin(arr), std::end(arr), [](auto a, auto b) {
return comp(&a, &b);
^^^^ <----- C++11 lambdas can be fully inlined
});