c++ - 如何调整类中动态分配的数组的大小?
问题描述
我在一个类中有一个私有数组,动态分配。随着我插入越来越多的项目,我需要在某个时候调整数组的大小。问题是如何正确地做到这一点?下面的代码以错误结尾:munmap_chunk(): invalid pointer while inserting a third item。
#include <string>
#include <cstring>
#include <cassert>
using namespace std;
template<typename T>
class Set
{
private:
T * array;
size_t arraySize;
unsigned int itemCount;
public:
Set() {
arraySize = 1;
itemCount = 0;
array = new T[arraySize];
};
bool Insert(const T item) {
if (itemCount == arraySize) {
T * tmpArray = new T[arraySize * 2];
memcpy(tmpArray, array, arraySize * sizeof(T));
arraySize *= 2;
delete [] array;
array = tmpArray;
}
array[itemCount] = item;
itemCount++;
return true;
}
};
int main ()
{
Set<string> x0;
assert( x0 . Insert( "apple" ) );
assert( x0 . Insert( "orange" ) );
assert( x0 . Insert( "pineapple" ) );
return 0;
}
我知道我可以使用例如向量来不关心分配,但我想知道如何以这种方式正确地做到这一点。
如果问题在某种程度上不合适,请原谅。这是我第一次提问
解决方案
memcpy
评论者所说的,加上你可以用调用来替换你的事实std::copy
以获得正确的行为:
std::copy (array, array + arraySize, tmpArray);
别忘了#include <algorithm>
。
推荐阅读
- javascript - 相机不是 THREE.Camera 的实例
- php - 某些条件返回以下错误: Uncaught SyntaxError: Unexpected token < in JSON at position 0
- python - 选择列表中的相邻坐标并返回一个新列表
- c# - 我可以调整 grid.column 的高度吗?
- scala - Scala返回抽象类
- javascript - PHP删除查询前的确认框[OK] & [CANCEL]
- c# - Unity 增强现实房屋动画 向上移动图像目标?
- python - 使用 scipy.optimize.minimize 对“火箭”进行轨迹优化
- react-native - 渲染标记问题 | 反应原生
- prolog - 家谱/3序言