【代码】模板实现动态线性表(无类型萃取)
2016-05-28 18:36
190 查看
动态表的模板是STL库中最常用的数据结构,其代码如下:template <class T>
class SeqList
{
public:
SeqList()
:_array(new T [3]),
_size(0),
_capacity(3)
{
memset(_array,0,sizeof(T)*3);
}
SeqList(const T &x)
:_array(new T[3]),
_size(1),
_capacity(0)
{
_array[0] = x;
}
SeqList(const SeqList & x)
{
_array = new T[x._size];
memcpy(_array, x._array, sizeof(T)*x._size);
_capacity = x._size;
_size = _capacity;
}
void PushBack(const T & x)
{
_CheckCapacity();
_array[_size++] = x;
}
SeqList & operator = (SeqList l)
{
swap(_array, l._array);
swap(_size, l._size);
swap(_capacity, l._capacity);
return *this;
}
~SeqList()
{
if (_array)
{
delete[] _array;
}
}
private:
void _CheckCapacity()
{
if (_size >= _capacity)
{
_capacity *= 3;
T * tmp = new T [_capacity];
memcpy(tmp, _array, sizeof(T)*_capacity);
delete[] _array;
_array = tmp;
}
}
T *_array;
size_t _size;
size_t _capacity;
}; 这里当我们用模板演化成用户自定义类型时会出现什么情况呢?- -。明天告诉你
本文出自 “pawnsir的IT之路” 博客,请务必保留此出处http://10743407.blog.51cto.com/10733407/1752363
class SeqList
{
public:
SeqList()
:_array(new T [3]),
_size(0),
_capacity(3)
{
memset(_array,0,sizeof(T)*3);
}
SeqList(const T &x)
:_array(new T[3]),
_size(1),
_capacity(0)
{
_array[0] = x;
}
SeqList(const SeqList & x)
{
_array = new T[x._size];
memcpy(_array, x._array, sizeof(T)*x._size);
_capacity = x._size;
_size = _capacity;
}
void PushBack(const T & x)
{
_CheckCapacity();
_array[_size++] = x;
}
SeqList & operator = (SeqList l)
{
swap(_array, l._array);
swap(_size, l._size);
swap(_capacity, l._capacity);
return *this;
}
~SeqList()
{
if (_array)
{
delete[] _array;
}
}
private:
void _CheckCapacity()
{
if (_size >= _capacity)
{
_capacity *= 3;
T * tmp = new T [_capacity];
memcpy(tmp, _array, sizeof(T)*_capacity);
delete[] _array;
_array = tmp;
}
}
T *_array;
size_t _size;
size_t _capacity;
}; 这里当我们用模板演化成用户自定义类型时会出现什么情况呢?- -。明天告诉你
本文出自 “pawnsir的IT之路” 博客,请务必保留此出处http://10743407.blog.51cto.com/10733407/1752363
相关文章推荐
- 【干货】C++通过模板特化实现类型萃取实例--实现区分基本类型与自定义类型的memcpy
- 【代码】模板实现双向链表的去重、拼接、合并、排序
- 关于mybatis的collection映射问题
- 【总结】C++静态成员函数及测试用例
- 【总结】C++静态成员变量的特性总结及测试用例
- 【总结】C++静态成员变量的特性总结及测试用例
- 【总结】C++基类与派生类的赋值兼容规则
- 【C语言位运算的应用】如何按bit位翻转一个无符号整型
- 双向链表的C++实现
- C++单链表的设计与实现
- 求最大公约数的设计与C语言实现
- 用C语言实现二分查找算法
- C++复数类的运算符重载
- c++日期类的实现级运算符的重载
- C++实现链表的进本操作及测试用例
- C语言实现顺序表的增删查改以及排序
- C语言实现C到C++的注释转换
- C语言用结构体写一个通讯录
- C语言模拟实现memset.memcmp函数
- 模拟实现C语言strncpy.strncat.strncmp函数