需求:写一个可变长度的数组类Array,用于存放若干元素,个数未知
设计:内部动态申请一个buffer
capacity:表示buffer的大小
size:表示buffer中已经存放元素的个数
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
template <typename T>//也可以写作template <class T>
class Array
{
public:
Array(int capacity = 4)
{
m_buffer = new T[capacity];
m_capacity = capacity;
m_size = 0;
}
void PushBack(T val)
{
if (m_size >= m_capacity)
{
Resize();
}
m_buffer[m_size] = val;
m_size++;
}
int Capacity()
{
return m_capacity;
}
int Size()
{
return m_size;
}
private:
void Resize()
{
//创建一个更大的缓冲区
int n = m_capacity + 4;
T* buf = new T[n];
//拷贝所有内容
memcpy(buf, m_buffer, m_capacity);
//删除旧的内存
delete[] m_buffer;
//更新成员变量
m_capacity = n;
m_buffer = buf;
}
private:
T* m_buffer;
int m_capacity; //容量
int m_size; //已经存放的对象的个数
};
int main()
{
Array <int> a; //也可以是Array <int> a(4);
a.PushBack(1);
a.PushBack(2);
a.PushBack(3);
a.PushBack(4);
a.PushBack(5);
int size = a.Size();
int capacity = a.Capacity();
return 0;
}
从 Array <int> a; //也可以是Array <int> a(4); 这段代码表明如果Array构造函数中有默认值的参数时,你可以给传参也可以不传参,他都会进入Array(int capacity = 4){}这个构造函数。