MyArray框架搭建与实现
#include<iostream>
using namespace std;
template<class T>
class MyArray
{
public:
//构造函数
MyArray<T>(int capacity) {
this->setmCapacity(capacity);
//this->mCapacity = capacity mCapacity是public才这样用
this->mSize = 0;
//申请内存
this->pAddr = new T[this->mCapacity];
}
//拷贝,const保证不改变原来的 MyArray
MyArray<T>(const MyArray<T>& 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];
}
}
//重载 [] 运算符
T& operator[](int index) {
return this->pAddr[index];
}
//重载 = 运算符
MyArray<T>& operator=(const MyArray<T>& arr) {
if (this->pAddr != NULL) {
delete[] this->pAddr;
}
this->mSize = arr.mSize;
this->mCapacity = arr.mCapacity;
//申请内存空间
this->pAddr = new T[this->mCapacity];
//数据拷贝
for (int i = 0; i < this->mSize; i++) {
this->pAddr[i] = arr.pAddr[i];
}
return *this;
}
//添加元素
void PushBack(T& data) {
//判断容器中是否有位置
if (this->mSize >= this->mCapacity) {
return;
}
//调用拷贝构造 =号操作符
//1. 对象元素必须能够被拷贝
//2. 容器都是值寓意,而非引用寓意 向容器中放入元素,都是放入的元素的拷贝份
//3 如果元素的成员有指针,注意深拷贝和浅拷贝问题
this->pAddr[this->mSize] = data;
//msize++
this->mSize++;
}
/*
定义第二个pushback()函数的意义在于可以直接传入数据,例如
arr.pushback(50);
左值表示可以在多行使用的值
右值一般表示临时变量,只能在当前行使用
这里的50是一个右值
两个&&表示对右值取引用
*/
void PushBack(T&& data) {
//判断容器中是否有位置
if (this->mSize >= this->mCapacity) {
return;
}
this->pAddr[this->mSize] = data;
//msize++
this->mSize++;
}
/*
mCapacity是private
*/
int getmCapacity(int capacity) {
return this->mCapacity;
}
void setmCapacity(int capacity) {
this->mCapacity=capacity;
}
//析构函数
~MyArray() {
if (this->pAddr != NULL) {
delete[] this->pAddr;
}
}
public:
//当前数组有多少元素
int mSize;
//保存数据的首地址
T* pAddr;
private:
//一共可以容下多少个元素
int mCapacity;
};
void 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);
//不能对右值取引用
//左值 可以在多行使用
//临时变量 只能当前行使用
marray.PushBack(100);
marray.PushBack(200);
marray.PushBack(300);
for (int i = 0; i < marray.mSize; i++) {
cout << marray[i] << " ";
}
cout << endl;
}
class Person {};
void test02() {
Person p1, p2;
MyArray<Person> arr(10);
arr.PushBack(p1);
arr.PushBack(p2);
}
int main()
{
test01();
test02();
return 0;
}
MyArray框架搭建与实现的更多相关文章
- Angular企业级开发(5)-项目框架搭建
1.AngularJS Seed项目目录结构 AngularJS官方网站提供了一个angular-phonecat项目,另外一个就是Angular-Seed项目.所以大多数团队会基于Angular-S ...
- 一步一步使用ABP框架搭建正式项目系列教程之本地化详解
返回总目录<一步一步使用ABP框架搭建正式项目系列教程> 本篇目录 扯扯本地化 ABP中的本地化 小结 扯扯本地化 本节来说说本地化,也有叫国际化.全球化的,不管怎么个叫法,反正道理都是一 ...
- ABP框架搭建项目系列教程基础版完结篇
返回总目录<一步一步使用ABP框架搭建正式项目系列教程> 经过前面十二篇的基础教程,现在终于该做个总结了. 回顾 第一篇,我们建议新手朋友们先通过ABP官网的启动模板生成解决方案,因为这样 ...
- 【Java EE 学习 69 中】【数据采集系统第一天】【SSH框架搭建】
经过23天的艰苦斗争,终于搞定了数据采集系统~徐培成老师很厉害啊,明明只是用了10天就搞定的项目我却做了23天,还是模仿的...呵呵,算了,总之最后总算是完成了,现在该好好整理该项目了. 第一天的内容 ...
- SSH(Struts2+Spring+Hibernate)框架搭建流程<注解的方式创建Bean>
此篇讲的是MyEclipse9工具提供的支持搭建自加包有代码也是相同:用户登录与注册的例子,表字段只有name,password. SSH,xml方式搭建文章链接地址:http://www.cnblo ...
- 原创:Equinox OSGi应用嵌入Jersey框架搭建REST服务
一.环境 eclipse版本:eclipse-luna 4.4 jre版本:1.8 二.Equinox OSGi应用嵌入Jersey框架搭建REST服务 1.新建插件工程HelloWebOSGI a. ...
- 关于使用ABP框架搭建的项目升级时需要注意的问题汇总
ABP理论学习总目录 一步一步使用ABP框架搭建正式项目系列教程 ABP之Module-Zero学习目录 本篇目录 说明 升级方法 问题_01:Log4Net导致编译不成功 2015/12/18更新 ...
- ssh框架搭建的基本步骤(以及各部分作用)
ssh框架搭建的基本步骤(以及各部分作用) 一.首先,明确spring,struts,hibernate在环境中各自的作用. struts: 用来响应用户的action,对应到相应的类进行 ...
- 淘宝(阿里百川)手机客户端开发日记第一篇 android 主框架搭建(一)
android 主框架搭建(一) 1.开发环境:Android Studio 相继点击下一步,直接项目建立完毕(如下图) 图片看的效果如果很小,请放大您的浏览器显示百分比 转载请注明http://w ...
随机推荐
- Python运算符的优先级是怎样的?
优先级数字越高表示优先级越高,有关运算符的详细介绍请参考<Python运算符大全>
- 第15.33节 PyQt(Python+Qt)入门学习:containers容器类部件QTabWidget选项窗部件简介
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.概述 容器部件就是可以在部件内放置其他部件的部件,在Qt Designer中可以使用的容器部件有 ...
- C#声明一个100大小的数组 随机生成1-100之间不重复的数
面试题:C#声明一个100大小的数组 随机生成1-100之间不重复的数下面是C#的实现方式,编译测试通过 public static void InsertRandomArray() { int[] ...
- CSS基础-Flexbox
flexbox 是一种一维的布局模型,它给 flexbox 的子元素之间提供了强大的空间分布和对齐能力. 说 flexbox 是一种一维的布局,是因为一个 flexbox 一次只能处理一个维度上的元素 ...
- CSS基础-层叠与继承
继承 一些属性可以被继承,一些不可以. 一般来说,字体颜色.字体大小会被继承,关于形状的如 padding .border .margin.width等就不会被继承.哪些属性属于默认继承很大程度上是由 ...
- luogu P6835 概率DP 期望
luogu P6835 概率DP 期望 洛谷 P6835 原题链接 题意 n + 1个节点,第i个节点都有指向i + 1的一条单向路,现在给他们添加m条边,每条边都从一个节点指向小于等于自己的一个节点 ...
- spark中map和mapPartitions算子的区别
区别: 1.map是对rdd中每一个元素进行操作 2.mapPartitions是对rdd中每个partition的迭代器进行操作 mapPartitions优点: 1.若是普通map,比如一个par ...
- Fisco Bcos学习资料连接
大牛博客:http://m.blog.csdn.net/sportshark FISCO BCOS学习资料索引;http://kb.bsnbase.com/webdoc/view/Pub4028813 ...
- Spring自带的定时任务框架Schedule的优缺点及使用
spring自带的定时任务框架的有点:简单,拆箱即用 spring自带的定时任务框架的缺点: 不支持集群:为避免重复执行的问题 不支持生命周期统一管理:不重启服务情况下关闭,启动任务 不支持分片任务: ...
- 自顶向下redis4.0(3)命令与dict
redis4.0的命令 简介 目录 redis4.0的命令 简介 正文 redisCommand与redisCommandTable 初始化命令 执行命令 set指令与字典 参考文献 正文 redis ...