C++实现顺序表的方法

所属分类: 软件编程 / C 语言 阅读数: 49
收藏 0 赞 0 分享

废话不多说了,直接给大家上关键代码了。

#pragma once
#include <assert.h>
template<class T>
class SeqList
{
public:
SeqList()
:_a(NULL)
,_size(1)
,_capacity(1)
{}
SeqList(T* a, size_t size)
:_a(new T[size])
,_size(size)
,_capacity(size)
{
for (size_t i = 0; i < _size; ++i)
{
_a[i] = a[i];
}
}
//拷贝构造函数常规写法
/*SeqList(const SeqList<T>& s)
:_a(new T[s._size])
,_size(s._size)
,_capacity(s._capacity)
{
for (size_t i = 0; i < _size; ++i)
_a[i] = s._a[i];
}*/
//拷贝构造函数现代写法
SeqList(const SeqList<T>& s)
:_a(NULL)
{
SeqList<T> tmp(s._a, s._size);
swap(_a, tmp._a);
_size = s._size;
_capacity = s._capacity;
}
~SeqList()
{
if (_a)
delete[] _a;
}
//赋值运算符重载常规写法
SeqList<T>& operator=(const SeqList<T>& s)
{
if (this != &s)
{
T* tmp = new T[s._size];
for (size_t i = 0; i < s._size; ++i)
{
tmp[i] = s._a[i];
}
delete[] _a;
_a = tmp;
_size = s._size;
_capacity = s._capacity;
}
return *this;
}
//赋值运算符重载现代写法
/*SeqList<T>& operator=(SeqList<T> s)
{
if (this != &s)
{
swap(_a, s._a);
_size = s._size;
_capacity = s._capacity;
}
return *this;
}*/
public:
void Print()
{
for (size_t i = 0; i < _size; ++i)
{
cout<<_a[i]<<" ";
}
cout<<endl;
}
void PushBack(const T& x)
{
_CheckCapacity();
_a[_size++] = x;
}
void PopBack()
{
assert(_size > 0);
--_size;
}
void Insert(int pos, const T& x)
{
assert(pos >= 0 && pos <= _size);
_CheckCapacity();
int iIndex = _size;
while (iIndex > pos) //int和size_t比较为什么不行?
{
_a[iIndex] = _a[iIndex-1]; 
--iIndex;
}
_a[iIndex] = x;
++_size;
}
void Erase(size_t pos)
{
assert(_size > 0 && pos < _size);
size_t index = pos;
while (index < _size-1)
{
_a[index] = _a[index+1];
++index;
}
--_size;
}
int Find(const T& x)
{
for (size_t i = 0; i < _size; ++i)
{
if (_a[i] == x)
{
return i;
}
}
return -1;
}
T& operator[](size_t index)
{
assert(index >= 0 && index < _size);
return _a[index];
}
void Reserve(size_t size) //保留空间,增容到size
{
_capacity = size;
_a = (T*)realloc(_a, _capacity * sizeof(T));
}
void Clear() //不释放空间
{
_size = 0;
}
void Size()
{
return _size;
}
protected:
void _CheckCapacity()
{
if (_size+1 > _capacity)
{
_capacity = _capacity*2;
_a = (T*)realloc(_a, _capacity * sizeof(T));
}
}
protected:
T* _a;
size_t _size;
size_t _capacity;
};

以上所述是小编给大家介绍的顺序表的C++实现方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

更多精彩内容其他人还在看

利用C语言来求最大连续子序列乘积的方法

这篇文章主要介绍了利用C语言来求最大连续子序列乘积的方法,基本的思路以外文中还附有相关ACM题目,需要的朋友可以参考下
收藏 0 赞 0 分享

用C语言判断一个二叉树是否为另一个的子结构

这篇文章主要介绍了用C语言判断一个二叉树是否为另一个的子结构,是数据结构学习当中的基础知识,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言实现的阶乘,排列和组合实例

这篇文章主要介绍了C语言实现的阶乘,排列和组合的方法,涉及C语言数学运算的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言查找数组里数字重复次数的方法

这篇文章主要介绍了C语言查找数组里数字重复次数的方法,涉及C语言针对数组的遍历与判断技巧,具有一定参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言简单实现计算字符个数的方法

这篇文章主要介绍了C语言简单实现计算字符个数的方法,涉及C语言针对字符串的简单遍历与判定技巧,具有一定参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

c实现linux下的数据库备份

本文给大家简单介绍下c实现linux下的数据库备份的方法和具体的源码,十分的实用,有需要的小伙伴可以参考下。
收藏 0 赞 0 分享

C++获得文件状态信息的方法

这篇文章主要介绍了C++获得文件状态信息的方法,包括文件状态信息、文件所在磁盘盘符、文件创建时间、访问时间及修改日期等,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言按关键字搜索文件夹中文件的方法

这篇文章主要介绍了C语言按关键字搜索文件夹中文件的方法,涉及C语言文件操作及字符串查找的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言之字符串模糊查询方法的实现

本篇文章主要为大家介绍字符串模糊查询的C语言程序编写方法,有需要的朋友可以参考下
收藏 0 赞 0 分享

C语言实现BMP转换JPG的方法

这篇文章主要介绍了C语言实现BMP转换JPG的方法,涉及C#图片格式转换的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多