gpt4 book ai didi

c++ - 如何对动态数组执行操作?

转载 作者:太空狗 更新时间:2023-10-29 23:06:04 24 4
gpt4 key购买 nike

我在有关动态数组的书籍中到处学习。我在 C++ 的 STL 中使用过它们。但是我仍然不清楚什么是动态数组。如何实现对动态数组的操作。

最佳答案

在 C++ 中有(好吧,很快就会有!)4 种数组:C 风格的静态数组,C++11 static arrays , C++ dynamic vectors和 C++14 dynamic arrays .

C 风格和 C++11 静态数组采用编译时常量大小参数,在初始化后不能放大/缩小。 C++ 动态 vector 可以在初始化时采用任意运行时数量的元素,之后可以放大/缩小。随着即将推出的 C++14 标准,还将有 std::dynarray这填补了现有容器之间的一个小差距:在初始化期间它将占用运行时数量的元素,但之后不能扩大/缩小。

以下是一些基本用例:

static const int N = 4;                // compile-time constant int
int M = 4; // run-time int

int c[N] = { 0, 1, 2, 3 }; // C-style static array: compile-time constant size
std::array<int, N> a = { 0, 1, 2, 3 }; // C++11 static array: compile-time constant size

int rc[M] = { 0, 1, 2, 3 }; // ERROR: M is not a compile-time constant expression
std::array<int, M> ra = { 0, 1, 2, 3 }; // ERROR: M is not a compile-time constant expression

std::vector<int> v { std::begin(a), std::end(a) }; // C++ dynamic vector: runtime size, but can be enlarged afterwards
v.push_back(4); // v enlarged to { 0, 1, 2, 3, 4 } now
v.pop_back(); // v shrunk back to { 0, 1, 2, 3 }

std::dynarray<int> d { std::begin(v), std::end(v) }; // C++14 dynamic array: runtime size, but cannot be enlarged afterwards

静态数组(C 风格数组,std::array)在堆栈上进行静态内存分配。动态数组( std::vector<T>std::dynarray<T> )可以采用 Allocator模板参数。对于 std::vector此分配器默认为 std::allocator<T> , 它使用 new 在幕后进行动态低级内存管理.对于 std::dynarray内存是从一个未指定的源分配的,它可能会也可能不会调用全局 operator new .

通过提供一个用户定义的分配器,std::vectorstd::dynarray可以与基于堆栈的内存分配一起使用,例如使用@HowardHinnant 的 stack allocator .

关于c++ - 如何对动态数组执行操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17001839/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com