I am writing a DynamicArray class and got stuck with resize()
function. It works as expected when I remove line delete[] temp
. But when I don't it seems copying only the last 2 elements. Am I missing something here??
#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;
}
Output:
1 22 3 4
0 0 3 4