为类调整动态分配的指针数组的大小
Resizing dynamically allocated pointer array to class
如何在不使用向量的情况下调整数组的大小?我要调整大小的数组是一个指向类
的指针class A
{
private:
B * b;
int numOfItems;
int maxNumOfItems;
public:
A();
~A();
resizeMX();
};
A::A()
{
numOfItems = 0;
maxNumOfItems = 20;
b = new B[maxNumOfItems];
for(int i=0;i<maxNumOfItems ;i++)
{
b[i] = 0;
}
}
A::~A()
{
for(int i=0;i<numOfItems;i++)
{
delete [] b;
}
}
void A::resizeMX(const B & obj)
{
bool value=false;
if(numOfItems<=maxNumOfItems && value == false)
{
//assign values to *b in for loop
}
else
{
//resize index of *b
我知道我们应该动态分配新的内存。像这样的?
++maxNumOfItems;
b=new B[maxNumOfItems];
//keep previous assigned values and add new values at the end
for(int j=numOfItems;j<maxNumOfItems;j++)
{
//assign values to b[j]
}
}
numOfItems++;
}
假设我重载了=操作符
你不能调整数组的大小,你只能分配一个新的(更大的大小)和复制旧数组的内容。如果你不想使用std::vector(出于某种原因),下面是它的代码:
int size = 10;
int* arr = new int[size];
void resize() {
size_t newSize = size * 2;
int* newArr = new int[newSize];
memcpy( newArr, arr, size * sizeof(int) );
size = newSize;
delete [] arr;
arr = newArr;
}
当您重新分配b = new B[...]
时,您会丢失原始指针,因此会丢失所有先前的对象。
相反,您需要为新内存使用临时变量,并从旧的b
复制(或移动)到新内存。然后删除旧内存并重新分配指针,
首先,数组不是指针。指针可以包含数组第一个元素的地址,该元素可以动态分配,也可以不动态分配。
无论如何,假设你有一个指向动态分配的B
数组的指针
pointer = new B[size]; // assume size > 0
// optionally do something with the elements of pointer other than resizing
则需要动态分配一个新的数组
B *new_pointer = new B[newsize]; // assume size < newsize
然后复制元素到新数组
for (i = 0; i < size; ++i)
new_pointer[i] = pointer[i]; // relies on B's assignment operator
然后释放旧的动态分配的数组
delete [] pointer;
,最后,重新分配pointer
以指向新分配的数组。
pointer = new_pointer;
标准容器更可取,因为它可以根据需要管理所有的分配和重新分配。
相关文章:
- 添加到数组指针
- C++语法差异:二维和一维数组(指针算术)
- 数组指针表示法C++(移动数组时)
- 复制后删除原始数组指针将前 3 个字节设置为 0
- C++访问指向结构的指针中的类数组指针
- C++编译时使用 constexpr 字符数组指针分配静态数组?
- std::flush可以用于将对象指针转换为其封闭数组指针吗
- 创建<int>对整数数组指针的矢量引用 (C++)
- 将 2D 数组指针传递给 C++ 中的函数
- 创建指针是否超过非数组指针的末尾,而不是从 C++17 中的一元运算符和未定义的行为派生?
- 队列数组指针 (C++)
- C++数组指针上的删除操作
- 对于循环不循环和检测字符数组 [指针和字符数组]
- 如何初始化数组指针对象
- 如何正确传递 2D 数组指针作为参数
- 从数组指针中获取怪异的数字
- 初始化std :: unique_ptr作为原始数组指针的初始化
- 将结构数组指针从C#传递到C
- STD :: Sort将数组指针设置为NULL
- C++数组指针错误无法将“int*”转换为“int**”