在c++中动态增加数组大小的更好方法
Better method to increase the size of an array in C++ dynamically
假设我有一个分配了new的字符数组。现在,如果我想修改数组的大小,那么下面两种方法中哪一种是最好的?1. 使用realloc函数OR2.分配一个新数组,将旧数组中的数据复制到新数组中,然后删除旧数组
使用malloc(不是new)分配块,然后使用realloc。Realloc知道块之后有多少可用空间可供扩展。
s2 = realloc(s,<size>);
if (s2) {
s = s2;
}
else {
free up s and handle the error
}
我看到的大多数代码都不能正确处理realloc的失败
您不能移植地将realloc应用于用new分配的缓冲区。因此,只有第二个选择是可行的。
考虑转换为std::vector和std::string
我想你是从C语言的角度考虑整个问题的。
如果您正在处理使用vector
的数组,则它是动态的,并且避免了您在问题
。
vector v(10); // allocates an array of 10 initialized to 0
v.push_back(42); // added another, so now array is 11 long
第一个选项还意味着如果realloc
发现块后没有足够的可用空间,则进行复制。(即使您使用malloc
来分配数组,这是使用realloc
的唯一正确选项。)
假设一个初始大小为n的数组。重新分配到新的大小为2n的数组并复制需要2n步,但接下来的n次"增加"操作是免费的。
顺便说一下,这就是std::vector
和许多其他数组容器的内部实现方式。
相关文章:
- 初始化具有非默认构造函数的std::数组项的更好方法
- Protobuf中重复字段的问题.使用重复字段进行序列化/反序列化的更好方法是什么?
- 编写按初始值循环的循环的更好方法是什么
- 用 c++ 为游戏制作"bullet"的更好方法?
- 在CMakeLists中包含目录的更好方法.txt
- 将QDomDocument数据用作文本的更好方法
- C++ - 创建具有相同字符的特定大小的以 null 结尾的 c 样式字符串的更好方法
- 在 sqlite3 中批量插入的更好方法C++
- 设计许多单例代码结构的更好方法
- 使用继承的类模板避免公共成员不可见和源代码膨胀/重复的更好方法
- 在初始化列表中初始化数组的更好方法
- 将对象从一个 std::d eque 移动到另一个的更好方法
- 请告诉我在巴泽尔拥有多平台工作空间的更好方法
- 构造具有大量数据的对象的更好方法(C++)
- 从2D矢量中找出最小尺寸的向量元素的更好方法
- 在C++中创建不可变对象的更好方法
- 在构造函数中组织初始值设定项列表的更好方法
- std::copy with return values - 防止"expression: string iterators incompatible"的更好方法?
- 删除数组成员的更好方法是什么?
- 在C 中操作数据的更好方法是什么