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;
}

运行结果:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/567972.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql udf提权hex_Mysql_UDF提权

Mysql_UDF提权作者&#xff1a;admin 发布于&#xff1a;2013-5-25 18:55 Saturday分类&#xff1a;MYSQLRoot权限一、上传udf.dll小于mysql5.1版本C:\\WINDOWS\\udf.dll 或C:\\WINDOWS\\system32\\udf.dll等于mysql5.1版本%mysql%\\plugin\\udf.dll 用 selectplugin_dir 查询…

STL4-类型转换

#include<iostream> using namespace std;class Building{}; class Animal{}; class Cat :public Animal {}; //Cat是Animal的子类//static_cast //用于内置的数据类型及具有继承关系的指针或者引用 void test01() {int a 97;//static_cast<要转换的类型>(转换的…

python argparse模块

argparse模块 argparse是python用于解析命令行参数和选项的标准模块&#xff0c;用于代替已经过时的optparse模块 使用步骤 import argparse # 1 导入模块&#xff0c;这个没什么说的 parser argparse.ArgumentParser() # 2 实例化一个对象&#xff0c;默认参数一堆&#…

STL5-异常

异常可以跨函数 异常必须处理 1、 #include<iostream> using namespace std; //c异常机制 跨函数 //c异常必须处理 不能留&#xff0c;否则报错 int divided(int x, int y) {if (y 0)throw y; //抛异常return (x / y); } void test01() {int x 10, y 0;//试着去捕获…

java 并发组件_Java 并发计数组件Striped64详解

作者&#xff1a; 一字马胡转载标志 【2017-11-03】更新日志日期更新内容备注2017-11-03添加转载标志持续更新Java Striped64Striped64是在java8中添加用来支持累加器的并发组件&#xff0c;它可以在并发环境下使用来做某种计数&#xff0c;Striped64的设计思路是在竞争激烈的时…

ubuntu的MySQL远程数据库连接问题查找

1、开放端口3306 2、添加权限 3、服务器本身没有在安全组规则中开放权限 添加安全组规则后重试。

java中集合怎么定义_Java集合系列(一):集合的定义及分类

1. 集合的定义什么是集合呢&#xff1f;定义&#xff1a;集合是一个存放对象的引用的容器。在Java中&#xff0c;集合位于java.util包下。2. 集合和数组的区别(面试常问)提到容器&#xff0c;就会想起数组&#xff0c;那么集合和数组的区别是什么呢&#xff1f;(这里是重点&…

STL6-输入输出流

cout 是 console output 缩写 程序 和键盘 之间有一个输入缓冲区 程序 和 显示器 之间有一个输出缓冲区 #include<iostream> #include<windows.h> #include<iomanip> using namespace std; #if 0 cout << "dd"; //全局流对象&#xff0c;默…

Ubuntu nginx+uwsgi部署Django项目

前提条件&#xff1a;首先项目使用一下命令启动成功后&#xff0c;输入公网ip后可以启动成功 python manage.py runserver 0.0.0.0:80 一、阿里云配置安全组 添加8000端口 二、安装配置uwsgi 1、确定django项目可以正常运行了&#xff0c;ctrlc停止项目&#xff0c;下面我们来…

STL7-基础

1、容器可以嵌套容器 2、容器分为序列式容器和关联式容器 序列式容器&#xff1a;容器的元素的位置是由进入容器时机和地点来决定 关联式容器&#xff1a;容器已经有规则&#xff0c;进入容器的元素的位置不是由进入容器时机和地点来决定 只与此容器的排列规则有关 3、迭代…

java 假设当前时间_Java中与日期和时间相关的类和方法

一、currentTimeMillis()方法System 类中的方法 currentTimeMillis() 方法可以返回从 GMT1970 年 1 月 1 日 00 : 00 : 00 开始到当前时刻的毫秒数。System.currentTimeMillis(); //返回值为long类型二、Date类1.构造方法(1)public Date (); 以当前系统时间创建一个Date对象&am…

STL8-string容器

C 没有 string 类&#xff0c;但提供了直接对字符数组、字符串操作的函数 -> 如 str_len()等等 -> 需要包含 “string.h”#include<iostream> #include<string> using namespace std;//初始化 void test01() {string s1; //调用无参构造string s2(10, a);str…

java 采集 cms_开源 java CMS - FreeCMS2.3 Web页面信息采集

Web页面信息采集从FreeCMS 2.1开始支持通过简单配置即可抓取目标网页信息&#xff0c;支持增量式采集、关键字替换、定时采集&#xff0c;同一采集规则可采集多个页面(静态和动态)&#xff0c;可采集多种信息属性&#xff0c;可自动审核且静态化信息页面。采集规则管理从左侧管…

Python中reshape函数参数-1的意思?

import numpy as np c np.array([[1,2,3],[4,5,6]]) print(2行3列) print(c.reshape(2,3)) print(3行2列) print(c.reshape(3,2)) print(我也不知道几行&#xff0c;反正是一列) print(c.reshape(-1,1)) print(我也不知道几列&#xff0c;反正是一行) print(c.reshape(1,-1)) …

STL9-vector容器

vector容器 动态数组 可变数组 vector容器 单口容器 vector实现动态增长&#xff1a; 当插入新元素时&#xff0c;如果空间不足&#xff0c;那么vector会重新申请更大内存空间&#xff08;默认二倍&#xff09;&#xff0c;将原空间数据拷贝到新空间&#xff0c;释放旧空…

函数返回值失效

#include<stdio.h> #include<stdlib.h> #include<string.h> #if 1 char* getMen2() {char buf[64]; //临时变量&#xff0c;栈区存放strcpy(buf, "abccddeeff");printf("buf:%s\n", buf);return buf; //此处并不是把内存块64个字节ret…

mysql突然出现慢sql_Mysql开启慢SQL并分析原因

第一步.开启mysql慢查询方式一:修改配置文件Windows&#xff1a;Windows 的配置文件为 my.ini&#xff0c;一般在 MySQL 的安装目录下或者 c:\Windows 下。Linux&#xff1a;Linux 的配置文件为 my.cnf &#xff0c;一般在 /etc 下在 my.ini 增加几行:[mysqlld]long_query_time…

STL10-deque容器

deque 双端队列 deque 删除操作 deque案例&#xff1a; #if 1 #include<iostream> #include<deque> using namespace std; void PrintDeque(deque<int>& d) {for (deque<int>::iterator it d.begin(); it ! d.end(); it) {cout << *it <…

STL11-stack容器

#if 1 #include<iostream> #include<stack> using namespace std;void test01() {//初始化stack<int> s1;stack<int> s2(s1);//stack操作s1.push(10);s1.push(20);s1.push(30);s1.push(40);cout << "栈顶元素&#xff1a;" << e…

java犀牛是什么意思_深入浅出Rhino:Java与JS互操作

2011年10月6日&#xff0c;一年一度的JavaOne大会隆重举行。JavaOne2011大会的主题之一介绍针对不同Java平台的产品路线图&#xff0c;这其中包括移动版(ME&#xff0c;Micro Edition)、标准版(SE&#xff0c;Standard Edition)以及企业版(EE&#xff0c;Enterprise Edition)。…