C++实战:手撕类似于vector的容器(逆序算法、排序算法等)

文章目录速览

1、使用C++泛型编程实现类似于vector的容器类ArrContainer

直接上代码:可作读者参考

cpp 复制代码
#pragma once
#include <exception>
template<typename T>
class ArrContainer
{
private:
	T* m_data; //存放数据
	int m_iCap; //容器的容量
	int m_iLen; //容器中元素的数量
	T* m_pHead; //头指针
	T* m_pRear; //尾部指针
public:
	ArrContainer() {
		m_iCap = 100;
		m_data = new T[m_iCap];
		m_iLen = 0;
		m_pHead = m_pRear = nullptr;
	}
	ArrContainer(int iLen)
	{
		if (iLen < 0)
		{
			m_data = nullptr;
			m_pHead = nullptr;
			m_pRear = nullptr;
			m_iLen = 0;
			m_iCap = 0;
		}
		m_iLen = iLen;
	}
	ArrContainer(T* data, int iLen)
	{
		//step01: Judge the parameters whether are illegal
		if (nullptr == data || iLen <= 0)
		{
			m_data = nullptr;
			m_pHead = nullptr;
			m_pRear = nullptr;
			m_iCap = 0;
			m_iLen = 0;
			return;
		}

		//step02: Allocate memory for data
		m_iCap = iLen + 100;
		m_iLen = iLen;
		m_data = new T[m_iCap];

		//step03: Copy data
		for (int i = 0; i < m_iLen; ++i)
		{
			m_data[i] = data[i];
		}

		m_pHead = &m_data[0];
		m_pRear = &m_data[m_iLen - 1];
	}
	~ArrContainer()
	{
		if (m_data != nullptr)
		{
			delete[] m_data;
			m_data = nullptr;
		}
	}
public:
	bool push_back(const T& elem)
	{
		if (m_iLen < m_iCap)
		{
			m_data[m_iLen - 1] = elem;
		}
		m_pRear++;
	}
	T& operator[](int index)
	{
		if (index < 0 || index >= m_iLen)
		{
			exit(-1);
		}
		return m_data[index];
		
	}
	int size()
	{
		return m_iLen;
	}
	int capacity()
	{
		return m_iCap;
	}
	bool resize(int iLenNew)
	{
		return false;
	}

	// 逆序算法
	bool reverse()
	{
		T tmp;
		while (m_pHead < m_pRear)
		{
			tmp = *m_pHead;
			*m_pHead = *m_pRear;
			*m_pRear = tmp;
			m_pHead++;
			m_pRear--;
		}
		m_pHead = &m_data[0];
		m_pRear = &m_data[m_iLen - 1];

		return true;
	}
};
相关推荐
RaymondZhao3411 分钟前
【全面推导】策略梯度算法:公式、偏差方差与进化
人工智能·深度学习·算法·机器学习·chatgpt
zhangfeng113319 分钟前
DBSCAN算法详解和参数优化,基于密度的空间聚类算法,特别擅长处理不规则形状的聚类和噪声数据
算法·机器学习·聚类
啊阿狸不会拉杆1 小时前
《算法导论》第 32 章 - 字符串匹配
开发语言·c++·算法
小学生的信奥之路1 小时前
洛谷P3817题解:贪心算法解决糖果分配问题
c++·算法·贪心算法
曙曙学编程2 小时前
stm32——GPIO
c语言·c++·stm32·单片机·嵌入式硬件
你知道网上冲浪吗2 小时前
【原创理论】Stochastic Coupled Dyadic System (SCDS):一个用于两性关系动力学建模的随机耦合系统框架
python·算法·数学建模·数值分析
△曉風殘月〆3 小时前
Visual Studio中的常用调试功能(下)
c++·ide·visual studio·调试
武当豆豆3 小时前
C++编程学习(第25天)
开发语言·c++·学习
地平线开发者4 小时前
征程 6 | PTQ 精度调优辅助代码,总有你用得上的
算法·自动驾驶
Tisfy4 小时前
LeetCode 837.新 21 点:动态规划+滑动窗口
数学·算法·leetcode·动态规划·dp·滑动窗口·概率