class CDynamicArray {
public:
int* m_pArr; // 数组
int m_size; // 使用量
int m_capacity; // 容量
public:
CDynamicArray(int n = 0):m_pArr(n > 0 ? new int[n]() /* () 为 默认初始化*/: nullptr), m_size(n), m_capacity(n){}
CDynamicArray(const CDynamicArray& arr)
: m_pArr(nullptr), m_size(arr.m_size), m_capacity(arr.m_capacity) {
if (arr.m_capacity > 0) {
this->m_pArr = new int[arr.m_capacity]();
for (int i = 0; i < arr.m_size; i++) {
this->m_pArr[i] = arr.m_pArr[i];
}
}
}
void push_back(int n) {
if (m_size >= m_capacity) {
// 考虑容量为 0 或 1 时, 容量的一半向下取整为0
m_capacity += m_capacity / 2 > 1 ? m_capacity / 2 : 1;
int* newarr = new int[m_capacity]();
for (int i = 0; i < m_size; i++) {
newarr[i] = m_pArr[i];
}
newarr[m_size++] = n;
delete[] m_pArr;
m_pArr = newarr;
}
else {
m_pArr[m_size++] = n;
}
}
void pop_back() {
m_size--;
}
void print() {
cout << "m_size = " << m_size << ", m_capacity = " << m_capacity << '\n';
for (int i = 0; i < m_size; i++) {
cout << m_pArr[i] << ' ';
}
cout << '\n';
}
};
C++ 手写动态数组
最新推荐文章于 2024-09-16 17:46:36 发布