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

embedded/2024/12/25 12:15:30/

文章目录速览

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

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

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

#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 illegalif (nullptr == data || iLen <= 0){m_data = nullptr;m_pHead = nullptr;m_pRear = nullptr;m_iCap = 0;m_iLen = 0;return;}//step02: Allocate memory for datam_iCap = iLen + 100;m_iLen = iLen;m_data = new T[m_iCap];//step03: Copy datafor (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;}
};

http://www.ppmy.cn/embedded/148611.html

相关文章

我的JAVA-Web基础(2)

1.JDBC 防止sql注入 2.JSP JSP的基本语法 基本语法是 <% %> Java代码 <% %> 输出变量 可以转换成${变量}的EL表达式 <%! %>定义变量 JSP的基本语法包括以下几个主要部分&#xff1a; 1. 表达式&#xff08;Expression&#xff09; 表达式用于将…

leetcode hot100相交链表

160. 相交链表 已解答 简单 相关标签 相关企业 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null # Definition for singly-linked list. # class ListNode(object): # …

机器学习-KMeans聚类

文章目录 KMeans聚类图像分割社交网络分析和推荐系统具体流程 效果和作用 KMeans聚类 图像分割 像素点分为不同的聚类&#xff08;特征值相似度高的就是一堆聚类&#xff09; 社交网络分析和推荐系统 依然是根据特征&#xff0c;不同对象不同的表达特征形式也不一样 具体流…

SSE(Server-Sent Events)返回n ,前端接收数据时被错误的截断【如何避免SSE消息中的换行符或回车符被解释为事件消息的结束】

一.问题背景 前后端分离项目&#xff0c;前端使用angular框架&#xff0c;后端使用springboot框架。后端使用spring-boot-starter-webflux【后面会专门出一期文章详解】提供流式接口&#xff0c;前端使用sse.js【后面会专门出一期文章详解】调用后端接口。 二.问题描述 后端…

支付宝订单码支付

1.订单码支付&#xff0c;首先下载官方网站提供的sdk包到你的项目中。 2.选择控制器复制官方文档的获取二维码相关的代码示例。打开sdk包中v2的index.php文件&#xff0c;这个才是你选择语言的具体代码。 3.引用里面所需要的类文件&#xff0c;文件下载到你的项目中后&#xf…

网络下载ts流媒体

网络下载ts流媒体 查看下载排序合并 很多视频网站&#xff0c;尤其是微信小程序中的长视频无法获取到准确视频地址&#xff0c;只能抓取到.ts片段地址&#xff0c;下载后发现基本都是5~8秒时长。 例如&#xff1a; 我们需要将以上地址片段全部下载后排序后再合成新的长视频。 …

Redis——缓存雪崩

文章目录 1. 问题介绍2. 解决方案2.1 方案一&#xff1a;随机过期时间2.2 方案二&#xff1a;增强 Redis 集群的可用性2.3 方案三&#xff1a;多级缓存2.3.1 做法2.3.2 流程2.3.3 示例代码2.3.4 评价 2.4 方案四&#xff1a;限流 3. 总结 1. 问题介绍 缓存雪崩&#xff1a;大量…

UE5 物体自动跟随主角镜头转向

A、思路 Tick&#xff0c;设置物体世界旋转 旋转数值源于物体自身位置与玩家摄像机位置的差值 效果是物体自动转向&#xff0c;玩家镜头动&#xff0c;则物体也随之调整角度。 适合一些提示文字&#xff0c;如按键提示、帮助之类。 B、参考图