STL3-MyArray动态数组类模板实现
注意
1、右值的拷贝使用
2、拷贝构造函数的使用
#include<iostream>
using namespace std;template<class T>
class MyArray{
public:MyArray(int capacity){this->mCapacity = capacity;this->mSize = 0;//申请内存this->pAddr = new T[this->mCapacity];}//拷贝构造MyArray(const MyArray<T>& arr); T& operator[](int index);MyArray<T> operator=(const MyArray<T>& arr);void PushBack(T& data);//&&对右值取引用void PushBack(T&& data);~MyArray() {if (this->pAddr != NULL){delete[] this->pAddr;}}
public:int mCapacity; //数组容量int mSize; //当前数组有多少元素T* pAddr; //保存数组的首地址
};
template<class T>
MyArray<T>::MyArray(const MyArray<T>& arr)
{//我的 将原有数组拷贝到当前数组 错误/*arr->mCapacity = this->mCapacity;arr->mSize = this->mSize;arr->pAddr = new T[this->mCapacity];for (int i = 0; i < mSize; i++){arr->pAddr[i] = this->pAddr[i];}*///将arr拷贝到当前数组this->mCapacity = arr.mCapacity;this->mSize = arr.mSize;//申请内存空间this->pAddr = new T[this->mCapacity];//数据拷贝for (int i = 0; i < this->mSize; i++){this->pAddr[i]=arr.pAddr[i];}
}
template<class T>
T& MyArray<T>::operator[](int index)
{return this->pAddr[index];
}template<class T>
MyArray<T> MyArray<T>::operator=(const MyArray<T>& arr)
{//释放以前空间if (this->pAddr != NULL){delete[] this - < pAddr;}this->mCapacity = arr.mCapacity;this->mSize = arr.mSize;//申请内存空间this->pAddr = new T[this->mCapacity];//数据拷贝for (int i = 0; i < this->mSize; i++){this->pAddr[i] = arr->pAddr[i];}return *this;
}template<class T>
void MyArray<T>::PushBack(T& data)
{//判断容器中是否有位置if (this->mSize >= this->mCapacity){return;}//调用拷贝构造 =号操作符//1、对象元素必须能够被拷贝//2、容器都是值寓意,而非引用寓意 向容器中放入元素都是放入元素的拷贝份//3、如果元素的成员有指针,注意 深拷贝和浅拷贝//深拷贝 拷贝指针 和指针指向的内存空间//浅拷贝 光拷贝指针this->pAddr[this->mSize] = data;mSize++;
}
#if 1
template<class T>
void MyArray<T>::PushBack(T&& data)
{//判断容器中是否有位置if (this->mSize >= this->mCapacity){return;}this->pAddr[this->mSize] = data;mSize++;
}
#endifvoid test01()
{MyArray<int> marray(20);int a = 10,b=20,c=30,d=40;marray.PushBack(a);marray.PushBack(b);marray.PushBack(c);marray.PushBack(d);//错误原因:不能对右值取引用//左值 可以在多行使用//右值 只能在当前行使用 一般为临时变量//增加void PushBack(T&& data)即可不报错marray.PushBack(100);marray.PushBack(200);marray.PushBack(300);for (int i = 0; i < marray.mSize; i++){cout << marray.pAddr[i] << " ";}cout << endl;MyArray<int> marray1(marray); //拷贝构造函数使用cout << "myarray1:" << endl;for (int i = 0; i < marray1.mSize; i++){cout << marray1.pAddr[i] << " ";}cout << endl;MyArray<int> marray2=marray; //=操作符的使用cout << "myarray2:" << endl;for (int i = 0; i < marray2.mSize; i++){cout << marray2.pAddr[i] << " ";}cout << endl;}
class Person{};
void test02()
{Person p1, p2;MyArray<Person> arr(10);arr.PushBack(p1);arr.PushBack(p2);}int main()
{test01();system("pause");return 0;
}
运行结果:
STL3-MyArray动态数组类模板实现相关推荐
- 第十四周项目三-数组类模板
/* *Copyright(c)2016,烟台大学计算机与控制工程学院 *All rights reserved *文件名称:123.cpp *作 者:王蕊 *完成日期:2016年6月2日 *版 本 ...
- 【C++深度剖析教程39】实现C++数组类模板
上一篇文章在那个学习了多参数类模板与特化的分析:点击链接查看上一篇文章:类模板深度剖析 本篇文章学习记录: 数值型模板参数 实现C++数组类模板 1.模板中的数值型参数 模板参数可以是数值型参数.也就 ...
- 学习笔记 C++ 动态数组类的声明
学习笔记 C++ 第九章 群体类和群体数据的组织/ 9.2线性群体 C++动态数组类的声明 一 Array<T>& operator= (const Array<T> ...
- 爪哇国新游记之十五----泛型动态数组类
import java.lang.reflect.Array;/*** 泛型动态数组类**/ public class DynamicArray<T extends Object>{pri ...
- C++实现数组类模板
本段代码是根据黑马先生教学的内容手撕出来的.特此感谢黑马先生 内容包含类数组类的设计,其中有构造函数,析构函数,拷贝函数,operator重定义=操作符,以及尾插和尾删法的运用. hpp文件内容 #p ...
- 爪哇国新游记之三----自创动态数组类
package array;public class DArray{private int[] arr;private int currCount;private static final int I ...
- 封装动态数组类Array
功能: 1.增.删.改.查 2.扩容.缩容 3.复杂度分析 4.均摊复杂度 5.复杂度震荡 分析动态数组的时间复杂度: 分析resize的时间复杂度: public class Array<E& ...
- android 动态数组类,Android动态数组ListPreference
rochdev.. 23 将preferences.xml放在res/xml中 android:title="Dynamic categories" android:summary ...
- 从零开始实现数据结构(一) 动态数组
动态数组是所有数据结构中最简单的一种,甚至在很多的语言中,数组本身就是可以不定长的.因为在学习c++的时候,使用动态数组的各种操作都不是很方便(数据结构的学习最好还是c或c++,基础打好了其他的语言数 ...
最新文章
- 看源码,我为什么推荐IDEA?
- 【Socket网络编程】4.tcp和udp的客户端和服务端收发流程
- SAP Control framework
- mysql 数值型注入_SQL注入之PHP-MySQL实现手工注入-数字型
- 做一个有胆识的有为青年
- Matlab英文操作系统下中文乱码的解决方案
- ubunt16.04 安装3090显卡驱动 cuda cudnn pytorch
- 【2017年第4期】大数据标准体系
- 数据搬运组件:基于Sqoop管理数据导入和导出
- java导出excel_Hutool Java 工具类库导出 Excel,超级简单!
- python多分类_python中多类分类的ROC或CAP曲线
- python3 之 天天生鲜 项目 缓存cache
- Linux内核调度——《奔跑吧Linux内核》学习笔记
- 12.TCP/IP 详解卷1 --- 广播和多播
- CentOS下安装配置MySQL8.0的步骤详解
- 诺顿误杀真相之“为什么诺顿会误杀中文windows”
- 常用音频单位简介:dBSPL、dBm、dBu、dBV、dBFS
- Linux 下安装和配置 MinDoc
- 重磅!中国芯片新锐50强榜单发布,上海20家、北京仅4家!(附:详细解读)...
- 2021-08-30-全排列-逆序数-排列的奇偶性
热门文章
- idea中svn的更新、检出、提交操作
- extjs 渲染之前的方法_Unity通用渲染管线(URP)系列(十一)——后处理(Bloom)...
- 安卓手机小说阅读器_乐小说阅读器下载手机版-乐小说阅读器app下载安装
- swagger2maven依赖_Maven + SpringMVC项目集成Swagger
- java 俄罗斯方块窗口_[代码全屏查看]-java 俄罗斯方块
- Android坑点-ByteBuffer.array() 入过坑吗
- Graphicsmagick linux 中文水印乱码-new
- ZXing生成二维码
- LeetCode算法入门- Palindrome Number-day2
- openstack资源使用汇总_关于OpenStack的学习路线及相关资源汇总