热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

STL:模板类手写数组

#includeusingnamespacestd;templateclassMyArray{friendvoidtest01();友元函数

#include
using namespace std;template<class T>
class MyArray {friend void test01();//友元函数
public:MyArray(int capacity)//构造函数{this->mCapacity &#61; capacity;this->mSize &#61; 0;//申请空间this->ptr &#61; new T[this->mCapacity];}MyArray(const MyArray<T>& another)//拷贝函数{this->mCapacity &#61; another.mCapacity;this->mSize &#61; another.mSize;//申请空间this->ptr &#61; new T[this->mCapacity];//开始拷贝for (int i &#61; 0; i < this->mSize; i&#43;&#43;){this->ptr[i] &#61; another.ptr[i];}}T& operator[](int index)// []操作符重载{return this->ptr[index];}MyArray<T>& operator&#61;(const MyArray<T>& another)// &#61;操作符重载{//原本容器有值if (this->ptr !&#61; nullptr) {delete[] this->ptr;this->ptr &#61; nullptr;this->mCapacity &#61; 0;this->mSize &#61; 0;}this->mCapacity &#61; another.mCapacity;this->mSize &#61; another.mSize;this->ptr &#61; new T[this->mCapacity];for (int i &#61; 0; i < this->mSize; i&#43;&#43;){this->ptr[i] &#61; another.ptr[i];}return *this;}void PushBack(T& data) {//一个&是对左值取引用//判断容器中是否有位置if (this->mCapacity <&#61; this->mSize) {return ;}this->ptr[this->mSize] &#61; data;this->mSize&#43;&#43;;}void PushBack(T&& data) {//两个&&是对右值取引用//判断容器中是否有位置if (this->mCapacity <&#61; this->mSize) {return ;}this->ptr[this->mSize] &#61; data;this->mSize&#43;&#43;;
}~MyArray() {if (this->ptr !&#61; nullptr) {delete[] this->ptr;this->ptr &#61; nullptr;this->mCapacity &#61; 0;this->mSize &#61; 0;}}
private://一共可以存储多少元素int mCapacity;//现在有多少元素int mSize;//保存数据的首地址T* ptr;
};
void test01() {//测试构造函数MyArray<int> marray(20);int a &#61; 10, b &#61; 20, c &#61; 30;//测试数组内添加元素//对左值取引用marray.PushBack(a);marray.PushBack(b);marray.PushBack(c);//对右值取引用marray.PushBack(1);marray.PushBack(2);marray.PushBack(3);//测试[ ]操作符重载for (int i &#61; 0; i < marray.mSize; i&#43;&#43;) {cout << marray[i] << " ";}
}int main() {test01();
}

在这里插入图片描述


推荐阅读
  • hlg_oj_1116_选美大赛这题是最长子序列,然后再求出路径就可以了。开始写的比较乱,用数组什么的,后来用了指针就好办了。现在把代码贴 ... [详细]
  • 本文针对HDU 1042 N! 问题提供详细的解析和代码实现。题目要求计算给定整数N(0 ≤ N ≤ 10000)的阶乘N!。文章不仅提供了算法思路,还附上了C++语言的具体实现。 ... [详细]
  • 本文探讨了Linux环境下线程私有数据(Thread-Specific Data, TSD)的概念及其重要性,介绍了如何通过TSD技术避免多线程间全局变量冲突的问题,并提供了具体的实现方法和示例代码。 ... [详细]
  • 深入解析 C++ 中的 String 和 Vector
    本文详细介绍了 C++ 编程语言中 String 和 Vector 的使用方法及特性,旨在帮助开发者更好地理解和应用这两个重要的容器。 ... [详细]
  • 本文详细介绍了在Luat OS中如何实现C与Lua的混合编程,包括在C环境中运行Lua脚本、封装可被Lua调用的C语言库,以及C与Lua之间的数据交互方法。 ... [详细]
  • 本文介绍了使用Python和C语言编写程序来计算一个给定数值的平方根的方法。通过迭代算法,我们能够精确地得到所需的结果。 ... [详细]
  • 该问题描述了以不同价格购买三种类型的鸡(公鸡、母鸡和小鸡),使用100元恰好购买100只鸡的不同组合。具体而言,每只公鸡价值5元,每只母鸡价值3元,而每三只小鸡价值1元。问题是,如何用100元购买100只鸡,并找出所有可能的公鸡、母鸡和小鸡的组合。 ... [详细]
  • 编程解析:CF989C 花朵之雾 (构造算法)
    本文深入探讨了CF989C '花朵之雾'问题的构造算法,提供了详细的解题思路和代码实现。 ... [详细]
  • 本文详细探讨了HihoCoder平台上的1398号问题——最大权闭合子图的求解方法。通过具体实例,深入分析了最大权闭合子图的概念及其算法实现。 ... [详细]
  • 探讨了一个包含纯虚函数的C++代码片段,分析了其中的语法错误及逻辑问题,并提出了修正方案。 ... [详细]
  • 想把一组chara[4096]的数组拷贝到shortb[6][256]中,尝试过用循环移位的方式,还用中间变量shortc[2048]的方式。得出的结论:1.移位方式效率最低2. ... [详细]
  • OpenCV中的霍夫圆检测技术解析
    本文详细介绍了如何使用OpenCV库中的HoughCircles函数实现霍夫圆检测,并提供了具体的代码示例及参数解释。 ... [详细]
  • 本文提供了一个关于AC自动机(Aho-Corasick Algorithm)的详细解析与实现方法,特别针对P3796题目进行了深入探讨。文章不仅涵盖了AC自动机的基本概念,还重点讲解了如何通过构建失败指针(fail pointer)来提高字符串匹配效率。 ... [详细]
  • C++11 新特性解析:Lambda 表达式与函数包装器
    本文深入探讨 C++11 中引入的 Lambda 表达式及其应用,以及如何利用函数包装器(Function Wrappers)实现更灵活的编程模式。通过具体示例,展示这些特性在实际开发中的优势。 ... [详细]
  • 本文详细介绍了 Redis 中的主要数据类型,包括 String、Hash、List、Set、ZSet、Geo 和 HyperLogLog,并提供了每种类型的基本操作命令和应用场景。 ... [详细]
author-avatar
于英豪H
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有