c++模板自定义数组

目录
  • 1.自定义数组.hpp--文件
  • 2.测试文件

前言:

制造通用模板,创建自定义的数组,

一个数组,里面有这么几个属性,数组容量,数组元素个数,数组本身内存地址,这几个数据都是定义私有类型,提供有参构造,让用户可以构造出这个数组对象。下面是有参构造和拷贝构造和析构函数还有operator=重载的代码

在前面类模板中成员函数创建有这个主意问题,最好的办法就是把类模板写在一个hpp的文件中,不要拆开写成多个文件

1.自定义数组.hpp--文件

#pragma once
#include<iostream>
using namespace std;
#include<string>
template<class T>
class Myarry
{
public:
  Myarry() {};//自己创建有参构造,编译器就不提供无参构造,所以必须自己写一次无参构造,即使是空实现也要写!
  Myarry(int capacity)//有参构造函数
  {
    this->capacity = capacity;
    this->size = 0;
    this->marry = new T[this->capacity];//把数组创建在堆区
  }
  ~Myarry()//析构函数
  {
    if (this->marry !=NULL)
    {
      delete []this->marry;//析构数组必须加[],否则会引发断点
      marry = NULL;
      this->capacity = 0;
      this->size = 0;
    }
  }
  Myarry(const Myarry& arr)//拷贝构造
  {
    this->capacity = arr.capacity;
    this->size = arr.size;
    this->marry = new T[arr.capacity];
    for (int i = 0; i < arr.size; i++)//把数据拷贝过来
    {
      this->marry[i] = arr->marry[i];
    }
  }
  //等号赋值
  Myarry& operator=(const Myarry& arr)
  {
    if (this->marry != NULL)//如果有数据先清空,再赋值
    {
      delete[]this->marry;
      this->marry  = NULL;
      this->size = 0;
      this->capacity = 0;
    }
    this->capacity = arr.capacity;
    this->size = arr.size;
    this->marry = new T[this->capacity];
    for (int i = 0; i < this->size; i++)//将数据进行拷贝
    {
      this->marry[i] = arr.marry[i];
    }
    return *this;
  }
  void pushback(const T&ptr)//尾加法
  {
    if (this->capacity == this->size)
    {
      cout << "容量已满!" << endl;
      return;
    }
    this->marry[this->size] = ptr;
    this->size++;
  }
  void deleteback()//尾删法
  {
    if (this->size == 0)
    {
      cout << "数据为零,没有可删数据!" << endl;
    }
    delete this->marry[this->size - 1];
    this->size--;
  }
  T & operator[](int index)//通过下标访问数组,并使它作为左值加&
  {
    if (index > this->capacity)
    {
      cout << "访问越界!" << endl;
      exit(0);
    }
    return this->marry[index];
  }
  int gercapacity()//获取数组容量
  {
    return this->capacity;
  }
  int getsize()//获取数组元素个数
  {
    return this->size;
  }
private:
  T * marry;//数组
  int capacity;//数组容量
  int size;//数组元素个数
};

2.测试文件

#include "自定义数组.hpp"
class person
{
public:
  person()
  {
    this->age = 0;
  }
  int age;
  string name;
};
void text01()
{
  person p[4];
  p[0].age = 20;
  p[0].name = "张三";
  p[1].age = 0;
  p[1].name = "李四";
  p[2].age = 40;
  p[2].name = "王五";
  p[3].age = 80;
  p[3].name = "赵六";
  Myarry<person>pp(10);
  for (int i = 0; i < 4; i++)
  {
    pp.pushback(p[i]);
  }
  for (int i = 0; i < pp.getsize(); i++)
  {
    cout << pp[i].name<<pp[i].age<< endl;
  }
}
void text02()
{
  Myarry<int>inta(10);
  for (int i = 0; i < 5; i++)
  {
    inta.pushback(i);
  }
  for (int i = 0; i < inta.getsize(); i++)
  {
    cout << inta[i] << endl;
  }
}
int main()
{
  /*text02();*/
  text01();
  return 0;
}

到此这篇关于c++模板自定义数组的文章就介绍到这了,更多相关c++自定义数组内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C++自定义函数判断某年某月某日是这一年中第几天

    本文实例讲述了C++自定义函数判断某年某月某日是这一年中第几天的方法.分享给大家供大家参考,具体如下: /* * 作 者: 刘同宾 * 完成日期:2012 年 11 月 30 日 * 版 本 号:v1.0 * * 输入描述: * 问题描述:编写函数判断某年某月某日这一年中是第几天,在主函数中调用该函数. * 程序输出: * 问题分析:略 * 算法设计:略 */ #include<iostream> using namespace std; int main() { void f(int yea

  • C++自定义数据类型方法详情

    目录 1.typedef声明 2.枚举类型enum 1.typedef声明 typedef用于给已有的类型一个新的名字,这个新的名字可以是自己定义的, 其语法为: typedef 现有类型 多个新的类型名称 中现有类型应该是已经定义好的类型,多个新的类型名称表示可以把这个现有的类型多个新的名字,比如下面给int类型两个新的名字,分别为IntDataX和IntDataY,并使用新的名字定义变量x和y: typedef int IntDataX, IntDataY; IntDataX x = 10;

  • C++通过自定义函数找出一个整数数组中第二大数的方法

    本文实例讲述了C++通过自定义函数找出一个整数数组中第二大数的方法.分享给大家供大家参考.具体实现方法如下: const int MINNUMBER = -32767 ; //2字节的Int 0x8000-1, //4字节的Int 0x80000000-1 -2147483647 int find_sec_max( int data[] , int count) { int maxnumber = data[0] ; int sec_max = MINNUMBER ; for ( int i =

  • C++ 自定义栈实现迷宫求解

    C++ 自定义栈实现迷宫求解 一:迷宫求解 是一个锻炼我们的算法求解能力的问题,它的实现方法有很多:今天我们就介绍其中的用栈求解的方法. 二:什么是栈: 大家应该都有往袋子里装东西的经历,在往袋子里装满东西之后,当我们去取的时候,总是先从最后放进去的东西的地方去取.也就是后进先出(FILO).虽然栈的单向性用起来会没有链表那样可以在任意位置对数据进行操作,但是正因为如此栈也带来了很大的方便. 三:迷宫求解 现在我们要在下面的迷宫寻找一条可行的路径 1 1 1 1 1 1 1 1 1 1 1 0

  • C语言编程C++自定义个性化类型

    目录 自定义类型 结构体 声明一个结构体类型 特殊声明 结构体自引用 结构体变量的定义和初始化 结构体内存对齐 结构体传参 位段 枚举 联合(共用体) 联合类型的定义 联合类型的声明 联合的特点 判断当前机器的大小端存储[] 自定义类型 结构体 结构是一些值的集合,这些值称为成员变量.结构的每个成员可以是不同类型的变量 声明一个结构体类型 //声明一个学生类型,是想通过学生类型来创建学生变量(对象) //描述学生就得有属性啥的.名字,电话,性别,年龄 struct Stu { char name

  • 解决易语言转换到C++ 自定义数据类型

    自定义数据类型如下 .版本 2 .数据类型 数据 .成员 坐标, 坐标_数据类型 .数据类型 坐标_数据类型 .成员 x, 小数型 .成员 z, 小数型 .成员 y, 小数型 这里的自定义数据类型下的"数据"类型下的"坐标"成员引用自定义数据类型"坐标_数据类型" 子程序如下 .版本 2 .子程序 自己数据 .参数 返回数据, 数据, 参考 返回数据.坐标.x = 1 返回数据.坐标.z = 2 返回数据.坐标.y = 3 这里的子程序内的参数&

  • c++模板自定义数组

    目录 1.自定义数组.hpp--文件 2.测试文件 前言: 制造通用模板,创建自定义的数组, 一个数组,里面有这么几个属性,数组容量,数组元素个数,数组本身内存地址,这几个数据都是定义私有类型,提供有参构造,让用户可以构造出这个数组对象.下面是有参构造和拷贝构造和析构函数还有operator=重载的代码 在前面类模板中成员函数创建有这个主意问题,最好的办法就是把类模板写在一个hpp的文件中,不要拆开写成多个文件 1.自定义数组.hpp--文件 #pragma once #include<iost

  • Js利用prototype自定义数组方法示例

    前言 在开始之前,先给大家介绍下js中使用使用原型(prototype)定义方法的好处 经常在前端面试或是和其他同行沟通是,在谈到构造在JS定义构造函数的方法是最好使用原型的方式:将方法定义到构造方法的prototype上,这样的好处是,通过该构造函数生成的实例所拥有的方法都是指向一个函数的索引,这样可以节省内存. 而本文主要给大家介绍了关于Js利用prototype自定义数组方法的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 题目 如何实现下列代码: [1,2,3

  • ThinkPHP模板中数组循环实例

    本文实例讲述了ThinkPHP模板中数组循环的实现方法.分享给大家供大家参考.具体实现方法如下: ThinkPHP开发过程中经常用到输出数组在模板中使用,一般select出来的数据都是二维数组,我们在模板中用volist标签就可以输出,今天开发遇到了这样一个问题:如果是二维数组,如何在模板中输出呢?经过查看开发手册,问题得到解决,分享一下,比如这样的一维数组: 复制代码 代码如下: array(2) { [2] => string(12) "www.jb51.net博文配图" [

  • smarty模板判断数组为空的方法

    本文实例讲述了smarty模板判断数组为空的方法.分享给大家供大家参考.具体如下: 这里主要介绍两种方法: 1. 用count来取得数组的下标个数 下面例子中,如果$array为空则不输出任何数据 {if $array|@count neq 0 } // array is empty {/if} 2. 直接判断 { if $array neq ""} //array is empty {/if} 希望本文所述对大家基于smarty模板的php程序设计有所帮助.

  • Javascript remove 自定义数组删除方法

    复制代码 代码如下: <html xmlns="http://www.w3.org/1999/xhtml" > <head> <title>Javascript自定义数组删除方法remove()</title> <script type="text/javascript"> Array.prototype.remove=function(dx){ if(isNaN(dx)||dx>this.lengt

  • Java自定义数组列表的实现操作

    主要目的: 解决ArrayList 类不能改变大小的问题,主要实现数组列表动态调整大小. 1.数组类型如何选择?由于我们不清楚数组中具体存入什么类型的数据, 我们可以声明一个对象Object [ ] ,这样,数组列表就可以存储任何类型的数据了. 2.泛型<> :如果定义的一个类或接口有一个或多个类型变量,则可以使用泛型. ArrayList<String>本身就是泛型,各种类型的变量都可以组装成对应的List,而不必针对每个类型分别实现一个构建ArrayList的类. 泛型字母所代

  • ThinkPHP模板自定义标签使用方法

    使用模板标签可以让网站前台开发更加快速和简单,使用过dedecms.phpcms等内容管理系统的人应该都知道,cms的前台都是使用模板标签来调用数据.以调用文章列表为例: dedecms可以写成: <ul> {dede:arclist row='10' orderby='id desc' titlelen=''} <li>[field:title]</li> {/dede:arclist} </ul> phpcms可以写成: <ul> {pc:c

  • java 创建自定义数组

    1.java创建自定义类数组方法: Student []stu = new Student[3]; for(int i = 0; i < 3; i ++) { stu[i] = new Student(); } 2.否则会提示空指针异常 package project; import java.io.*; import java.util.Scanner; class Student { private int id; private String name; private int score

  • ThinkPHP自定义函数解决模板标签加减运算的方法

    本文实例讲述了ThinkPHP自定义函数解决模板标签加减运算的方法.分享给大家供大家参考.具体如下: 实际项目中,我们经常需要标签变量加减运算的操作.但是,在ThinkPHP中,并不支持模板变量直接运算的操作. 幸运的是,它提供了自定义函数的方法,我们可以利用自定义函数解决: ThinkPHP模板自定义函数语法如下: 格式:{:function(-)} (参考官方帮助文档:http://thinkphp.cn/Manual/196) 利用这个,我们来试做加法和减法. 一.在ThinkPHP中定义

  • .NET Core自定义项目模板的全过程

    前言: 前面介绍 自定义项目模板 中介绍了一种简单的方式--通过创建项目导出为项目模板方式实现.本次将采用dotenet cil(手脚架)来创建项目模板. 那么,我们首先看下当前dotnet 支持的项目模板: 可以看到当前dotnet中已经提供了很多模板项目,那么如何根据项目开发的积累内容通过dotnet cli创建一个自己的项目来提升开发效率呢? 1.实现自定义项目模板 自定义模板项目模板肯定就需要模板实现,本次就使用使用之前文章中项目结构作为模板项目来实现自定义项目模板 接下跟着步骤来创建模

随机推荐