- 浏览: 24230 次
- 性别:
- 来自: 浙江
最新评论
最近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; }
发表评论
-
配置免安装版Mysql
2016-03-08 23:46 423今天在下载MySQL的时候遇到一些麻烦,可能也是挺普遍的现象, ... -
swap算法
2015-12-13 16:30 1063在这里介绍几种交换算法 一、 最常用的一种 int x=1 ... -
c++链表实现2
2015-11-25 20:21 1208template <class Elem> cl ... -
acm实用小技巧
2015-11-23 21:46 2187在acm题目中经常会有十分麻烦的问题,有时候这些问题可以用一些 ... -
c++ 用数组实现栈类
2015-06-15 12:27 1442#include<iostream> #incl ... -
c++ 用类模版实现链表(c++语言程序设计第四版示例代码)
2015-06-12 22:28 929#include<iostream> #incl ... -
c++ 实现五种基础的排序算法
2015-06-11 22:29 1270#include<iostream> using ... -
java 实现自定义链表
2015-06-06 21:33 15661.链表结构 链表是链式的结构 2.链表的组成 ... -
小白谈谈云计算--基于Google三大论文
2015-06-06 21:18 2719之前在没有接触到云计算之前,只是对云计算有一点点模糊的 ... -
java 线程弹球小游戏
2015-06-03 19:40 746最近java学到线程,于是做了一个线程弹球的小游戏,不过还没完 ... -
c++运算符重载
2015-05-30 01:06 411一、加+,减-,乘*,除/ 的运算符重载 Rational ... -
java 链表
2015-05-25 20:52 01.链式结构是什么样的? 2.链表的组成 链表是由 ... -
算法竞赛入门经典(第二版)第2章习题
2015-05-25 20:43 52922.4.1 输出技巧 #include <stdio.h ... -
java异常处理机制
2015-05-21 21:29 471java异常关键字有以下几个,分别为 try catch fi ... -
java 关键字
2015-05-14 22:49 589关键字是事先定义的,有特别意义的标识符,有时又叫保留字。对于 ...
相关推荐
本段代码以int类型为例实现功能,但类模板的特性使得数据类型可以依据需求而改变,因此用户可以在充分学习的基础上,举一反三,增加代码的可重用性。 本代码适用于初学面向对象编程,学习C++中类或类模板的学习者。...
动态数组类模板Array C++ //数组类模板声明 template class Array { public: Array(int sz = 50); Array(const Array<T> &A); ~Array(void); Array<T>& operator = (const Array<T> &rhs;); //重载=,使数组...
### 用C++的类模板实现通用堆栈结构 在软件开发过程中,数据结构的设计与实现至关重要。其中,堆栈(Stack)作为一种重要的线性数据结构,在多种应用场景中发挥着关键作用。本文将详细介绍如何利用C++中的类模板...
在这个“C++_MFC_类数组”主题中,我们将深入探讨C++中的类数组以及如何在MFC环境中使用它们。 首先,让我们理解“类数组”。在C++中,数组是一种数据结构,它可以存储固定数量相同类型的数据。然而,类数组不是C++...
本篇将深入探讨如何使用C++中的模板来实现动态数组。 首先,我们要理解什么是模板。模板是C++中的一个特性,它允许我们编写泛型代码,即可以处理多种数据类型的代码。模板分为函数模板和类模板,这里我们将关注类...
C++实现的大小可变的数组模板类,具有越界检查等功能
#include "stdafx.h" #include using namespace std; template class MyArray
这里我们将深入探讨如何使用C++模板来实现一个双下标重载的Matrix类,这是一个常见的数学概念,通常用于表示二维矩阵。 首先,我们需要理解C++中的模板声明。模板声明的基本形式是`template <typename T>`,这里的`...
以下是一个简单的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类模板,它采用了双层散列技术来提高性能。这个实现旨在提供高效的数据存储和操作,特别是在处理大量数据时。 首先,让我们深入了解ArrayList的...
在本话题中,我们将深入探讨如何利用模板类来实现一个数组类的封装,以便提供更灵活、安全且易于使用的接口。下面将详细阐述这一过程。 首先,我们需要了解数组的基本概念。在C++中,数组是一种数据结构,它存储同...
本话题将深入探讨如何利用C++的类模板来实现一个队列数据结构。 首先,队列是一种基本的数据结构,它的操作遵循“先进先出”(FIFO)原则,类似于现实生活中的排队。在计算机科学中,队列常用于任务调度、内存管理...
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++编程中动态数组的一种封装,它利用了C++的模板和动态内存管理特性,提供了对不同类型数据的动态数组操作。通过理解和使用这样的自定义类,程序员可以更加灵活地处理数组,提高代码的可读性和可...
本文将深入探讨如何利用模板类的数组特化来实现这一目标,并通过具体的示例代码展示其实现过程。 #### 二、基本概念:泛型容器与数组特化 通常,泛型容器(如`std::vector`)被设计成能够存储任何类型的单个或多个...
C++中有关模板的试题题型练习题是C++模板类型题型的综合应用,涵盖了函数模板、类模板的设计方法和实现。下面对标题、描述、标签和部分内容进行详细的解释和分析。 一、函数模板设计 函数模板是C++模板技术的核心...
在C++中,循环队列可以使用数组或者链表来实现,这两种方式各有优缺点。下面我们将详细探讨这两种实现方式及其基本功能。 首先,我们来看数组实现的循环队列。数组是最基础的数据结构,它的优点是访问速度快,空间...