C++实现顺序表的方法

 更新时间:2016年08月17日 09:48:19   作者:zgw285763054  
本文给大家带来了C++实现顺序表的方法,代码简单易懂,附有注释,感兴趣的朋友一起看下吧

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

#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语言编写汉诺塔游戏

    这篇文章主要介绍了C语言编写汉诺塔游戏,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2021-11-11
  • C语言 基本语法示例讲解

    C语言 基本语法示例讲解

    本篇文章主要讲解C语言 基本语法,这里提供简单的示例和代码来详细讲解C语言的基本语法,开始学习C语言的朋友可以看一下
    2016-08-08
  • Reactor反应器的实现方法详解

    Reactor反应器的实现方法详解

    本篇文章是对Reactor反应器的实现方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C语言实现字符串拼接和拷贝

    C语言实现字符串拼接和拷贝

    这篇文章主要为大家详细介绍了C语言实现字符串拼接和拷贝,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-08-08
  • 解析C/C++指针、函数、结构体、共用体

    解析C/C++指针、函数、结构体、共用体

    这篇文章主要介绍了C/C++指针、函数、结构体、共用体的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-01-01
  • C++读取wav文件中的PCM数据

    C++读取wav文件中的PCM数据

    这篇文章主要为大家详细介绍了C++读取wav文件中的PCM数据,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • 用c语言实现HUP信号重启进程的方法

    用c语言实现HUP信号重启进程的方法

    本篇文章是对使用c语言实现HUP信号重启进程的方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C++快速幂与大数取模算法示例

    C++快速幂与大数取模算法示例

    这篇文章主要介绍了C++快速幂算法和大数取模算法的示例,对C++程序员来说有一定的帮助,有需要的朋友可以参考借鉴,下面来一起看看。
    2016-08-08
  • C++中vector迭代器失效问题的原因及解决方案

    C++中vector迭代器失效问题的原因及解决方案

    迭代器(iterator)是一种用于遍历数据集合的的对象,它提供了一种访问数据集合中元素的方式,而无需暴露数据集合内部的细节,使用迭代器,我们可以对数据集合中的每个元素进行处理,本文介绍了C++中关于vector迭代器失效问题的原因及解决方案,需要的朋友可以参考下
    2024-09-09
  • C++全面细致讲解复数类

    C++全面细致讲解复数类

    本文章向大家介绍C++ 标准库中的复数类,主要包括C++ 标准库中的复数类使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下
    2022-06-06

最新评论