C++模板顺序表

来源:互联网 发布:ubuntu ntfs 移动硬盘 编辑:程序博客网 时间:2024/06/13 01:50
.h
#define _CRT_SECURE_NO_WARNINGS 1template <typename T>class SeqList{public:SeqList():_data(NULL), _size(0), _capacity(0)  //容量{}~SeqList(){Distory();}SeqList(const SeqList<T>& s):_data(new T[s._size]), _size(s._size)- capacity(s._size){for (size_t i = 0; i < _size; i++){_data[i] = s._data[i];}}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._data[i];}delete[]_data;_data = tmp;_size = s._size;_capacity = s._size;}return*this;}void PushBack(const T& x){_CheckCapacity();_data[_size] = x;_size++;}void PopBack(){if (_size > 0){--_size;}}void PushFront(const T&x){_CheckCapacity();for (size_t i = _size; i > 0; i--){_data[i] = _data[i - 1];}_data[0] = x;_size++;}void PopFront(){if (_size > 0){for (size_t i = 0; i < _size - 1; i++){_data[i] = _data[i + 1];}_size--;}}void Print(){if (_size == 0){cout << "顺序表为空!";}for (size_t i = 0; i < _size; i++){cout << _data[i] << " ";}cout << endl;}protected:void _CheckCapacity(){if (_size >= _capacity){T* tmp = new T[_capacity * 2 + 3];for (size_t i = 0; i < _size; i++){tmp[i] = _data[i];}delete[]_data;_data = tmp;_capacity = _capacity * 2 + 3;}}void Distory(){if (_data){delete[]_data;_data = NULL;_size = 0;_capacity = 0;}}protected:T* _data;size_t _size;size_t _capacity;};void test1(){SeqList<int>L;L.PushBack(1);L.PushBack(2);L.PushBack(3);L.PushFront(99);L.PopBack();L.PopBack();L.PopBack();L.PopFront();L.Print();}//string 类的拷贝构造以及运算符重载void test2(){SeqList<string>L;L.PushBack("11111111111111111");L.PushBack("2222");SeqList<string>l1;l1 = L;l1.Print();}//string类的尾插及尾删&头插及头删void test3(){SeqList<string>L;/*L.PushBack("11111111111111111");L.PushBack("2222322");L.PopBack();L.PopBack();*/L.PushFront("11111111111111");L.PushFront("222234444444444");L.PushFront("222111");L.PopFront();L.Print();}
.cpp
#define _CRT_SECURE_NO_WARNINGS 1#include<iostream>#include<string>using namespace std;#include"Seqlist.h"int main(){ /*test1();*//* test2();*/test3();system("pause");return 0;}

0 0