zoukankan      html  css  js  c++  java
  • 数组模板

    MyVector.h

    //模板类,不要分开多文件去写。要类的声明和类函数的实现体放在一个文件中去写。这里没有分开写
    //如果要岔开写的的,需要将实现体的文件 #include进来(即实现函数的.cpp文件)。

    #define  _CRT_SECURE_NO_WARNINGS 
    #pragma  once
    #include <iostream>
    using namespace std;
    //1 Myvector 能够存放 int,char, 
    //2 MyVector 能够存放 Teacher对象
    //函数的声明和类的
    template<class T>
    class MyVector
    {
    	friend ostream& operator<<<T>(ostream &out,MyVector &myvector);//友元函数声明
    public:
    	MyVector();
    	MyVector(int len);
    	MyVector(const MyVector &another);//拷贝构造函数
    	~MyVector();
    	MyVector& operator=(const MyVector &another);
    	T& operator[](int index);
    private:
    	int len;
    	T *space;
    };
    
    //函数的实现
    template<typename T>
    MyVector<T>::MyVector()//构造函数
    {
    	space=NULL;
    	this->len=0;
    }
    template<typename T>
    MyVector<T>::MyVector(int len)//构造函数
    {
    	space=new T[len];
    	this->len=len;
    }
    template<typename T>
    MyVector<T>::MyVector(const MyVector &another)//拷贝构造函数
    {
    	len=another.len;
    	space=new T[len];
    	for(int i=0;i<len;i++)
    	{
    		space[i]=another.space[i];
    	}
    }
    template<typename T>
    MyVector<T>::~MyVector()//析构函数
    {
    	if(space!=NULL)
    	{
    		delete[] space;
    		space=NULL;
    		len=0;
    	}
    }
    template<typename T>
    T& MyVector<T>::operator[](int index)
    {
    	return space[index];
    }
    template<typename T>
    MyVector<T>& MyVector<T>::operator=(const MyVector<T> &another)
    {
    	//先把释放旧的内存
    	if(space!=NULL)
    	{
    		delete[] space;
    		space=NULL;
    		len=0;
    	}
    	//跟据情况分配内存
    	this->len=another.len;
    	this->space=new T[len];
    	//拷贝数据
    	for(int i=0;i<len;i++)
    	{
    		this->space[i]=another.space[i];
    	}
    	return *this;//返回本身
    }
    template<typename T>
    ostream& operator<<(ostream &out,MyVector<T> &myvector)
    {
    	for(int i=0;i<myvector.len;i++)
    	{
    		out<<myvector.space[i]<<" ";
    	}
    	return out;
    }
    

      test_MyVector.cpp测试数组模板

    #include <iostream>
    using namespace std;
    #include <string>
    #include "MyVector.h"
    class Teacher
    {
    	friend ostream& operator<<(ostream &out,Teacher &t)//友元函数声明
    	{
    		out<<"姓名:"<<t.name<<" 年龄:"<<t.age<<endl;
    		return out;
    	}
    public:
    	Teacher()
    	{
    		//this->name="";
    		///////
    		this->name=NULL;
    		////////
    		this->age=0;
    	}
    	//Teacher(string name,int age)
    	Teacher(char *name,int age)
    	{
    		//this->name=name;
    		//////////////
    		this->name=new char[strlen(name)+1];
    		strcpy(this->name,name);
    		////////////////
    		this->age=age;
    	}
    	Teacher(const Teacher &another)
    	{
    		//this->name=another.name;
    		/////////////////////
    		if(this->name!=NULL)
    		{
    			delete[] this->name;
    			this->age=0;
    		}
    		this->name=new char[strlen(another.name)+1];
    		strcpy(this->name,another.name);
    		////////////////////
    		this->age=another.age;
    	}
    	~Teacher()
    	{
    		//this->name="";
    		//////////
    		if(this->name!=NULL)
    		{
    			delete[] this->name;
    			this->name=NULL;
    		}
    		this->age=0;
    		////////////////
    	}
    	Teacher& operator=(const Teacher &another)
    	{
    		//this->name=another.name;
    		/////////////////////////
    		if(this->name!=NULL)
    		{
    			delete[] this->name;
    			this->age=0;
    		}
    		this->name=new char[strlen(another.name)+1];
    		strcpy(this->name,another.name);
    		//////////////////////
    		this->age=another.age;
    		return *this;
    	}
    private:
    	//string name;//使用string类比较简单在C++中尽可能使用string表示字符串
    	char *name;//char *name就会涉及到深拷贝和浅拷贝问题
    	int age;
    };
    int main()
    {
    	MyVector<int> vector_int(10);
    	for(int i=0;i<10;i++)
    	{
    		vector_int[i]=i+1;
    	}
    	cout<<vector_int<<endl;
    	MyVector<int> vector_intcopy;
    	vector_intcopy=vector_int;
    	cout<<vector_intcopy<<endl;
    	MyVector<char> vector_char(5);
    	for(int i=0;i<5;i++)
    	{
    		vector_char[i]=i+'a';
    	}
    	cout<<vector_char<<endl;
    	Teacher t1("jueshi",23);
    	Teacher t2("quanyecha",25);
    	Teacher t3("honglve",28);
    	MyVector<Teacher> vector_teacher(3);
    	vector_teacher[0]=t1;
    	vector_teacher[1]=t2;
    	vector_teacher[2]=t3;
    	cout<<vector_teacher<<endl;
    }
    

      

  • 相关阅读:
    真正的e时代
    在线手册
    UVA 10616 Divisible Group Sums
    UVA 10721 Bar Codes
    UVA 10205 Stack 'em Up
    UVA 10247 Complete Tree Labeling
    UVA 10081 Tight Words
    UVA 11125 Arrange Some Marbles
    UVA 10128 Queue
    UVA 10912 Simple Minded Hashing
  • 原文地址:https://www.cnblogs.com/jueshi0208/p/5549238.html
Copyright © 2011-2022 走看看