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++實現順序表
分享路徑:http://m.kartarina.com/article16/jedpdg.html

成都網站建設公司_創新互聯,為您提供品牌網站設計微信公眾號微信小程序ChatGPT網站營銷

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

h5響應式網站建設
主站蜘蛛池模板: 亚洲精品色午夜无码专区日韩 | 亚洲国产日产无码精品| 国产成人无码A区在线观看导航 | 亚洲AV无码国产精品麻豆天美| 国产精品无码av在线播放| 亚洲AV日韩AV永久无码久久| 国语成本人片免费av无码| 成年无码av片在线| 91精品久久久久久无码| 国产午夜鲁丝片AV无码| 无码囯产精品一区二区免费| 青春草无码精品视频在线观| 亚洲AV中文无码乱人伦下载| 久久亚洲精品无码网站| 亚洲AV区无码字幕中文色| 无码av天天av天天爽| 无码AV片在线观看免费| 国产成人无码精品久久久免费 | av无码东京热亚洲男人的天堂 | 亚洲最大av无码网址| 日韩av片无码一区二区不卡电影| 亚洲AV无码久久精品成人| 亚洲国产成人精品无码区花野真一| 天码av无码一区二区三区四区 | 亚洲综合最新无码专区| 伊人无码精品久久一区二区| 国产50部艳色禁片无码| 国产成人无码AV一区二区| 亚洲精品无码永久在线观看| 亚洲a∨无码精品色午夜| 在线观看成人无码中文av天堂| 久久久久琪琪去精品色无码| 一区二区三区无码视频免费福利 | 国产精品无码午夜福利| 中文字幕无码日韩专区免费| 无码人妻久久一区二区三区蜜桃| 黄色成人网站免费无码av| 内射人妻无码色AV天堂| 国语成本人片免费av无码| 无码人妻精一区二区三区| 国产精品无码MV在线观看|