`
CrazyMizzz
  • 浏览: 24237 次
  • 性别: Icon_minigender_1
  • 来自: 浙江
社区版块
存档分类
最新评论

c++ 用类模版实现数组类

c++ 
阅读更多
最近c++学到数组类,写了代码将他实现,基本具有vector类的功能

#include<iostream>
#include<string>
#include<cassert>
using namespace std;
template<class T>
class Array
{
public:
	//构造函数 
	Array(int sz = 50){
		assert(sz >= 0);
		size = sz;
		list = new T[size];
	}
	//复制构造函数 
	Array(const Array<T>&a){
		size = a.size;
		list = new T[size];
		for (int i = 0; i < size; i++){
			list[i] = a.list[i];
		}
	}
	~Array(){
		delete[] list;
	}
	//=等号运算符重载 
	Array<T>& operator=(const Array<T> &rhs){
		if (&rhs != this){
			if (size != rhs.size){
				delete [] list;
				size = rhs.size;
				list = new T[size];
			}
			for (int i = 0; i < size; i++){
				list[i] = rhs.list[i];
			}
		}
		return *this;
	}
	//[]下标运算符重载 
	T & operator [] (int i){
		assert(i >= 0 && i < size);
		return list[i];
	}
	const T & operator[](int i)const{
		assert(i >= 0 && i < size);
		return list[i];
	}
	//重载指针转换运算符,将Array类的对象名转换为T类型的指针
	//指向当前对象中的私有数组,
	//因而可以像使用普通数组首地址一样使用Array类的对象名 
	operator T * (){
		return list;
	}
	operator const T *()const{
		return list;
	}
	//获得当前数组大小 
	int getSize()const{
		return size;
	}
	//重设当前数组大小 
	void resize(int sz){
		assert(sz >= 0);
		if (sz == size)
			return;
		T * newList = new T[sz];
		int n = (sz < size) ? sz : size;
		for (int i = 0; i < n; i++){
			newList[i] = list[i];
		}
		delete[] list;
		list = newList;
		size = sz;
	}
	//添加数据 
	void add(const T x){
		assert(size >= 0);
		size++;
		T * newList = new T[size];
		for (int i = 0; i < size-1; i++){
			newList[i] = list[i];
		}
		newList[size-1] = x;
		delete[] list;
		list = newList;

	}
	//移除数据 
	void remove(const int n){
		assert(size >= 0 && n < size);
		T * newlist = new T[--size];
		for (int i = 0; i < n; i++){
			newlist[i] = list[i];
		}
		for (int i = n+1; i < size+1; i++){
			newlist[i-1] = list[i];
		}
		delete[] list;
		list = newlist;
	}
	//插入数据 
	void insert(const int n,const int x){
		assert(size >= 0 && n < size);
		T * newlist = new T[++size];
		for (int i = 0; i < n; i++){
			newlist[i] = list[i];
		}
		newlist[n] = x;
		for (int i = n + 1; i < size ; i++){
			newlist[i] = list[i-1];
		}
		delete[] list;
		list = newlist;
	}
private:

	T* list;
	int size;
};
int main(){
	Array<int> a(4);
	cout << "size=" << a.getSize() << endl;
	for (int i = 0; i < a.getSize(); i++){
		a[i] = i;
	}
	for (int i = 0; i < a.getSize(); i++){
		cout << a[i] << endl;
	}
	cout << "***********test***************" << endl;
	cout << "add " << endl;
	a.add(53);
	for (int i = 0; i < a.getSize(); i++){
		cout << a[i] << endl;
	}
	cout << "size=" << a.getSize()<<endl;
	cout << "***********test***************" << endl;
	cout << "remove" << endl;
	a.remove(2);
	for (int i = 0; i < a.getSize(); i++){
		cout << a[i] << endl;
	}
	cout << "size=" << a.getSize() << endl;
	cout << "***********test***************" << endl;
	cout << "insert" << endl;
	a.insert(2, 100);
	for (int i = 0; i < a.getSize(); i++){
		cout << a[i] << endl;
	}
	cout << "size=" << a.getSize() << endl;
	cout << "***********test***************" << endl;
	return 0;
}
0
0
分享到:
评论

相关推荐

    C++类模板实现数组的排序以及增删查

    本段代码以int类型为例实现功能,但类模板的特性使得数据类型可以依据需求而改变,因此用户可以在充分学习的基础上,举一反三,增加代码的可重用性。 本代码适用于初学面向对象编程,学习C++中类或类模板的学习者。...

    C++动态数组类模板

    动态数组类模板Array C++ //数组类模板声明 template class Array { public: Array(int sz = 50); Array(const Array&lt;T&gt; &A); ~Array(void); Array&lt;T&gt;& operator = (const Array&lt;T&gt; &rhs;); //重载=,使数组...

    用c++的类模板实现通用堆栈结构

    ### 用C++的类模板实现通用堆栈结构 在软件开发过程中,数据结构的设计与实现至关重要。其中,堆栈(Stack)作为一种重要的线性数据结构,在多种应用场景中发挥着关键作用。本文将详细介绍如何利用C++中的类模板...

    C++_MFC_类数组

    在这个“C++_MFC_类数组”主题中,我们将深入探讨C++中的类数组以及如何在MFC环境中使用它们。 首先,让我们理解“类数组”。在C++中,数组是一种数据结构,它可以存储固定数量相同类型的数据。然而,类数组不是C++...

    C++动态数组模板实现

    本篇将深入探讨如何使用C++中的模板来实现动态数组。 首先,我们要理解什么是模板。模板是C++中的一个特性,它允许我们编写泛型代码,即可以处理多种数据类型的代码。模板分为函数模板和类模板,这里我们将关注类...

    可变数组模板类 C++实现

    C++实现的大小可变的数组模板类,具有越界检查等功能

    C++ 自定义动态数组模板

    #include "stdafx.h"  #include  using namespace std;  template  class MyArray

    C++数组的模版实现代码

    这里我们将深入探讨如何使用C++模板来实现一个双下标重载的Matrix类,这是一个常见的数学概念,通常用于表示二维矩阵。 首先,我们需要理解C++中的模板声明。模板声明的基本形式是`template &lt;typename T&gt;`,这里的`...

    c++模板类实现快速排序

    以下是一个简单的C++模板类实现快速排序的示例: ```cpp template void quickSort(T arr[], int left, int right) { if (left ) { int pivotIndex = partition(arr, left, right); quickSort(arr, left, pivot...

    数据结构:基于C++模板类的实现

    《数据结构:基于C++模板类的实现》是一本深入探讨如何使用C++语言来构建高效数据结构的书籍。在C++中,模板类是一种强大的工具,它允许我们编写通用的代码,适用于不同类型的对象,这在处理数据结构时特别有用。通过...

    ArrayList的一个C++类模板实现

    不过,根据标题和描述,这里我们讨论的是一个用C++实现的ArrayList类模板,它采用了双层散列技术来提高性能。这个实现旨在提供高效的数据存储和操作,特别是在处理大量数据时。 首先,让我们深入了解ArrayList的...

    模板类实现数组类封装模板类实现数组类封装

    在本话题中,我们将深入探讨如何利用模板类来实现一个数组类的封装,以便提供更灵活、安全且易于使用的接口。下面将详细阐述这一过程。 首先,我们需要了解数组的基本概念。在C++中,数组是一种数据结构,它存储同...

    C++类模板实现的队列

    本话题将深入探讨如何利用C++的类模板来实现一个队列数据结构。 首先,队列是一种基本的数据结构,它的操作遵循“先进先出”(FIFO)原则,类似于现实生活中的排队。在计算机科学中,队列常用于任务调度、内存管理...

    C++栈类模板

    C++栈类模板 template class Stack { public: Stack(void); void Push(const T &item;); //将元素item压入栈 T Pop(void); //将栈顶元素弹出栈 void ClearStack(void); T Peek(void)const; //访问栈顶元素 ...

    CNewArr C++写的动态数组类

    总之,CNewArr类是C++编程中动态数组的一种封装,它利用了C++的模板和动态内存管理特性,提供了对不同类型数据的动态数组操作。通过理解和使用这样的自定义类,程序员可以更加灵活地处理数组,提高代码的可读性和可...

    数组特化模板类

    本文将深入探讨如何利用模板类的数组特化来实现这一目标,并通过具体的示例代码展示其实现过程。 #### 二、基本概念:泛型容器与数组特化 通常,泛型容器(如`std::vector`)被设计成能够存储任何类型的单个或多个...

    C++中有关模板的试题题型练习题

    C++中有关模板的试题题型练习题是C++模板类型题型的综合应用,涵盖了函数模板、类模板的设计方法和实现。下面对标题、描述、标签和部分内容进行详细的解释和分析。 一、函数模板设计 函数模板是C++模板技术的核心...

    C++循环队列模版(数组和链表两种实现方式都有)

    在C++中,循环队列可以使用数组或者链表来实现,这两种方式各有优缺点。下面我们将详细探讨这两种实现方式及其基本功能。 首先,我们来看数组实现的循环队列。数组是最基础的数据结构,它的优点是访问速度快,空间...

Global site tag (gtag.js) - Google Analytics