C++使用模板实现顺序表
来源:互联网 发布:服务器地址域名形式 编辑:程序博客网 时间:2024/05/21 17:56
#pragma once #include<iostream>using namespace std;#include<stdlib.h>#include<assert.h>typedef int DataType;class SeqList{public: SeqList() : _pData(new DataType[3]) , _capacity(3) , _size(0) {} SeqList(DataType* array, size_t size) : _pData(new DataType[size]) , _capacity(size) , _size(size) { for (size_t i = 0; i < size; ++i) _pData[i] = array[i]; } SeqList(const SeqList& s) { _pData = new DataType[s._size]; _capacity = s._size; _size = s._size; for (size_t i = 0; i < s._size; ++i) { _pData[i] = s._pData[i]; } } SeqList& operator=(const SeqList& s) { if (this->_pData) { _pData = new DataType[]; memcpy(_pData, s._pData, sizeof(DataType)*s._size); } } ~SeqList() { if (_pData) { delete[] _pData; _pData = NULL; _capacity = 0; _size = 0; } } void PushBack(const DataType& data)//尾插 { CheckCapacity(); _pData[_size] = data; ++_size; } void PopBack() //尾删 { if (_size) { --_size; } } DataType Find(DataType data) //查找 { for (DataType j = 0; j <= (DataType)_size; j++) { if (data == _pData[j]) { return 1; } } return -1; } // 参数检测 void Insert(size_t pos, DataType data) //插入 { if (pos > _size) return; CheckCapacity(); size_t end = _size; while (end >= pos) { _pData[end + 1] = _pData[end]; --end; } _pData[pos] = data; ++_size; } void Erase(size_t pos) //固定位置删除 { assert(pos <= _size); size_t end = _size; while (pos < end) { _pData[pos] = _pData[pos + 1]; pos++; } --_size; } size_t Size()const //返回顺序表的大小 { return _size; } size_t Capacity()const //返回顺序表的当前容量 { return _capacity; } bool Empty()const //判断顺序表是否为空 { return 0 == _size; } // 将顺序表中的元素改成newSize DataType& operator[](size_t index) { assert(index < _size); return _pData[index]; } const DataType& operator[](size_t index)const { return _pData[index]; } DataType& Front() // 获取顺序表中第一个元素 { return _pData[0]; } const DataType& Front()const // 获取顺序表中第一个元素 { if (_size) { return _pData[0]; } else return NULL; } DataType& Back() // 获取顺序表中最后一个元素 { return _pData[_size-1]; } const DataType& Back()const // 获取顺序表中最后一个元素 { return _pData[_size-1]; } void Clear() //清空顺序表 { _size = 0; } void CheckCapacity() //检测顺序表的容量 { if (_size >= _capacity) { size_t NewCapacity = _capacity * 2 + 3; DataType* pTemp = new DataType[NewCapacity]; for (size_t i = 0; i < _size; ++i) { pTemp[i] = _pData[i]; } delete _pData; _pData = pTemp; _capacity = NewCapacity; } } void ReSize(size_t newSize, DataType data = DataType()) { if (newSize < _size) _size = newSize; else if (newSize>=_size&&newSize<_capacity) { for (size_t i = _size; i < newSize; ++i) _pData[i] = data; _size = newSize; } else { DataType* pTemp = new DataType[newSize]; for (size_t i = 0; i < _size; ++i) pTemp[i] = _pData[i]; for (size_t i = _size; i < newSize; ++i) pTemp[i] = data; delete _pData; _pData = pTemp; _capacity = newSize; _size = newSize; } } friend ostream& operator<<(ostream& _cout, const SeqList& s) { for (size_t i = 0; i < s._size; ++i) cout << s._pData[i] << " "; return _cout; }private: DataType* _pData; size_t _capacity; // 最大元素的个数 size_t _size; // 有效元素的个数 };void TestSeqList(){ int array[] = { 1, 2, 3, 4 }; SeqList s1(array, sizeof(array) / sizeof(array[0])); s1.PushBack(5); cout << s1 << endl; cout << s1.Size() << endl; cout << s1.Capacity() << endl; s1.ReSize(2); cout << s1 << endl; cout << s1.Size() << endl; cout << s1.Capacity() << endl; s1.ReSize(6); cout << s1 << endl; cout << s1.Size() << endl; cout << s1.Capacity() << endl; s1.ReSize(20); cout << s1 << endl; cout << s1.Size() << endl; cout << s1.Capacity() << endl;}int main(){ TestSeqList(); return 0;}
运行结果:
阅读全文
0 0
- c++(模板类)实现顺序表
- 【C++】用模板实现顺序表
- 【C++】用模板实现顺序表Vector
- C++使用模板实现顺序表
- 模板实现顺序表
- 模板实现顺序表
- 模板实现顺序表
- 模板实现顺序表
- [数据结构] 顺序表的实现(c++/类模板)
- 【C++】模板类顺序表
- 小明哥教你使用模板函数实现顺序表
- C++模板实现顺序表
- 顺序表 C++模板实现
- C++模板实现顺序表
- 模板实现动态顺序表
- 用模板实现顺序表
- 类模板实现顺序表
- 顺序表的模板实现
- Uva 230
- java 第四章 类与对象
- jenkins sonar-scanner 安装测试
- 物联网的三层框架
- 3年测试经验的文艺青年,从京东测试团队浅谈纯功能测试人员该何去何从?
- C++使用模板实现顺序表
- 关于STL之vector,deque的总结
- ios10中禁止用户缩放页面
- POJ 1028-Web Navigation
- 剑指_矩阵中的路径_回溯法
- Jackson介绍(1)-jackson2.x与Jackson1.9的比较
- log4net config
- 1328买玩具
- 十分简单-如何在局域网中将Ubuntu文件夹共享给Windows