我正在编写DynamicArray类,并被resize()
函数卡住了。当我删除delete[] temp
行时,它按预期工作。但是,当我不这样做时,似乎只复制了最后两个元素。我在这里想念什么吗?
#include <iostream>
#include <initializer_list>
template <typename T, int N>
class DynamicArray
{
private:
T *m_array;
size_t m_capacity = N * sizeof(T); // Capacity of the array
size_t m_size; // Number of added elements
public:
const int GROWTH_FACTOR = 2;
DynamicArray(std::initializer_list<T> elements) : m_size(elements.size()) {
m_array = new T[m_capacity / sizeof(T)];
std::copy(elements.begin(), elements.end(), m_array);
}
DynamicArray() : m_size(0) {
m_array = new T[m_capacity / sizeof(T)];
}
void resize() {
T *temp = new T[m_capacity / sizeof(T) * GROWTH_FACTOR];
std::copy(m_array, m_capacity / sizeof(T) + m_array, temp);
m_array = temp;
delete[] temp;
}
void print() {
for (int i = 0; i < m_size; i++){
std::cout << m_array[i] << " ";
}
std::cout << std::endl;
}
};
int main() {
DynamicArray<int, 5> array = { 1, 22, 3, 4 };
array.print();
array.resize();
array.print();
return 0;
}
输出:1 22 3 4
0 0 3 4
最佳答案
您正在删除刚分配的内存。调整大小应该通过从旧内存分配新的内存复制元素,然后删除旧内存来进行。
像这样
void resize() {
T *temp = new T[m_capacity / sizeof(T) * GROWTH_FACTOR];
std::copy(m_array, m_capacity / sizeof(T) + m_array, temp);
delete[] m_array;
m_array = temp;
}
我还将研究如何将容量乘以sizeof(T)
,然后在所有使用它的地方,将容量乘以sizeof(T)
。如果同时消除这两种操作,您将获得相同的结果。
关于c++ - 在C++中复制动态分配的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62965594/