C++模板实现简单的链表和顺序表

       从最初学习C语言到C++,就有一个认识就是作为一个优秀的程序猿一定要学会 ”偷懒“ ,用程序员的话来说就是复用,在C的基础上开发的C++就深刻阐明了这一道理,因为这样有太多的好处,增加了代码的可移植性,提高了可维护性。C++的模板就很有用,可以大大提高写代码的效率,同时优秀的代码总是最简洁最有效的代码。下面我们来用模板实现链表和顺序表。

顺序表

SeqList.h文件

#define _CRT_SECURE_NO_DEPRECATE
#include <iostream>
#include <assert.h>
#include <string>
using namespace std;

template <typename T>

class SeqList
{
private:
	T* _a;
	size_t _size;
	size_t _capacity;
public:
	SeqList()
		:_a(NULL)
		, _size(0)
		, _capacity(0)
	{}

	SeqList(const SeqList<T>& s)
	{
		//_a = (T*)malloc(sizeof(T)*s._size);
		_a = new T[s._size];
		//memcpy(_a, s._a, sizeof(T)*s._size);
		for (size_t i = 0; i < s._size; ++i)
		{
			_a[i] = s._a[i];
		}
		_size = s._size;
		_capacity = s._capacity;
	}


	void Swap(SeqList& s)
	{
		swap(_a, s._a);
		swap(_size, s._size);
		swap(_capacity, s._capacity);
	}

	SeqList<T>& operator=(SeqList<T> s)
	{
		Swap(s);
		return *this;
	}

	~SeqList()
	{
		if (_a != NULL)
		{
			delete[] _a;
			//free(_a);
			_size = _capacity = 0;
		}
	}

	void PushBack(const T& x)
	{
		_CheckCapacity();
		_a[_size] = x;
		_size++;
	}

	void PopBack()
	{
		if (_size > 0)
		{
			--_size;
		}
	}

	void PushFront(const T& x)
	{
		_CheckCapacity();
		if (_size == 0)
		{
			_a[0] = x;
			++_size;
		}
		else
		{
			int i = 0;
			for (i = _size; i > 0; i--)
			{
				_a[i] = _a[i - 1];
			}
			_a[0] = x;
			++_size;
		}
	}

	void _CheckCapacity()
	{
		if (_size >= _capacity)
		{
			_capacity = _capacity * 2 + 3;
			//_a = (T*)realloc(_a, _capacity*sizeof(T));

			T* tmp = new T[_capacity];
			if (_a != NULL)
			{
				//memcpy(tmp, _a, sizeof(T)*_size);  //适用于内置类型
				for (size_t i = 0; i < _size; ++i)
				{
					tmp[i] = _a[i];
				}
				delete[] _a;
			}
			_a = tmp;
		}
	}

	void PopFront()
	{
		if (_size == 1)
		{
			--_size;
		}
		else
		{
			for (size_t cout = 1; cout < _size; cout++)
			{
				_a[cout - 1] = _a[cout];
			}
			--_size;
		}
	}

	void Insert(size_t pos, const T& x)
	{
		assert(pos > 0 && pos < _size);
		_CheckCapacity();
		if (pos == 1)
		{
			PushFront(x);
		}
		else if (pos == _size-1)
		{
			PushBack(x);
		}
		else
		{
			for (size_t i = _size; i >= pos; i--)
			{
				_a[i] = _a[i - 1];
			}
			_a[pos - 1] = x;
			_size++;
		}
	}

	void Erase(size_t pos)
	{
		assert(po
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习是一种人工智能(AI)的子领域,致力于研究如何利用数据和算法让计算机系统具备学习能力,从而能够自动地完成特定任务或者改进自身性能。机器学习的核心思想是让计算机系统通过学习数据的模式和规律来实现目标,而不需要显式地编程。 机器学习应用非常广泛,包括但不限于以下领域: 图像识别和计算机视觉: 机器学习在图像识别、目标检测、人脸识别、图像分割等方面有着广泛的应用。例如,通过深度学习技术,可以训练神经网络来识别图像的对象、人脸或者场景,用于智能监控、自动驾驶、医学影像分析等领域。 自然语言处理: 机器学习在自然语言处理领域有着重要的应用,包括文本分类、情感分析、机器翻译、语音识别等。例如,通过深度学习模型,可以训练神经网络来理解和生成自然语言,用于智能客服、智能助手、机器翻译等场景。 推荐系统: 推荐系统利用机器学习算法分析用户的行为和偏好,为用户推荐个性化的产品或服务。例如,电商网站可以利用机器学习算法分析用户的购买历史和浏览行为,向用户推荐感兴趣的商品。 预测和预测分析: 机器学习可以用于预测未来事件的发生概率或者趋势。例如,金融领域可以利用机器学习算法进行股票价格预测、信用评分、欺诈检测等。 医疗诊断和生物信息学: 机器学习在医疗诊断、药物研发、基因组学等领域有着重要的应用。例如,可以利用机器学习算法分析医学影像数据进行疾病诊断,或者利用机器学习算法分析基因数据进行疾病风险预测。 智能交通和物联网: 机器学习可以应用于智能交通系统、智能城市管理和物联网等领域。例如,可以利用机器学习算法分析交通数据优化交通流量,或者利用机器学习算法分析传感器数据监测设备状态。 以上仅是机器学习应用的一部分,随着机器学习技术的不断发展和应用场景的不断拓展,机器学习在各个领域都有着重要的应用价值,并且正在改变我们的生活和工作方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值