首先我们通过一个模板类的顺序表,来了解c++在什么情况下需要对不同的类型不同对待。
这里为了说明重点,只写了增容和尾插部分。
template <class T>
class SeqList
{
public:
SeqList()
:_a(NULL)
, _size(0)
, _capacity(0)
{}
void CheckCapacity()
{
if (_size >= _capacity)
{
_capacity = _capacity > 0 ? _capacity * 2 : 3;//当容量为0时增容为3,之后每次增2倍
T* newA = new T[_capacity];
if (_a != NULL)
{
memcpy(newA, _a, _size*sizeof(T));//使用内置类型:memcpy
}
delete[] _a;
_a = newA;
}
}
void PushBack(const T& x)
{
CheckCapacity();
_a[_size++] = x;
}
void Print()
{
for (size_t i = 0; i < _size; i++)
{
cout << _a[i] << " ";
}
cout << endl;
}
private:
T* _a;
size_t _size;
size_t _capacity;
};
void TestSeqList()
{
SeqList<int> s1;
s1.