C++实现顺序表的方法
2016-08-17 09:48
671 查看
废话不多说了,直接给大家上关键代码了。
#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++】模拟实现顺序队列方法一
- 静态查找的方法:顺序查找、对半查找、分块查找,C++代码实现
- 静态查找的方法:顺序查找、对半查找、分块查找,C++代码实现
- Singleton在C++中的两种实现方法
- C++Builder/Delphi中透明Panel及透明窗口的实现方法
- TreeSet() 类逆向排序(实现compare()方法以便按正常顺序的逆向进行操作)。
- 顺序表SqList的C++代码实现
- 模拟实现VC中的handle的c++方法,欢迎指正~~~
- 线性表的顺序表示实现-C++版
- 探索c++的函数pow()的实现方法·数学与程序设计的结合(zz)
- 在C++中实现库动态初始化的一种方法
- 转:使用IDispatch::Invoke函数在C++中调用C#实现的托管类库方法
- 非均匀取样数据的功率谱估计方法 --c++实现
- 用户体验测试的自动化实现 - 第二种检查Tab顺序的方法
- C#中Join()方法实现线程的顺序执行
- [C++] 用VC 6.0实现串行通信的三种方法
- C++模板应用——让模板定义和实现分离的方法
- 浮点性(float)转化为字符串类型 自定义实现和深入探讨C++内部实现方法