回顾大二的数据结构知识。从数组开始。实现了一个可自动扩充容量的泛型数组。

头文件:Array.h

#ifndef Array_hpp
#define Array_hpp template <class T>
class Array{
private:
T *base; //数组首地址
int length; //数组中元素
int size; //数组大小,以数组中元素的大小为单位
public:
//初始化数组,分配内存
bool init();
//检查内存是否够用,不够用就增加
bool ensureCapcity();
//添加元素到数组尾
bool add(T item);
//插入元素到数组的具体位置,位置从1开始
bool insert(int index,T item);
//删除指定位置的元素并返回,位置从1开始
T del(int index);
//返回指定位置的元素
T objectAt(int index);
//打印数组所有元素
void display();
}; #endif /* Array_hpp */

实现:Array.cpp

#include "Array.hpp"
#include <mm_malloc.h>
#include <iostream>
using namespace std; template<typename T> bool Array<T>::init(){
base = (T *)malloc(10*sizeof(T));
if(!base){
return false;
}
size = 10;
length = 0;
return true;
} template<typename T> bool Array<T>::ensureCapcity(){
if(length >= size){
T *newBase = (T*)realloc(base,10 * sizeof(T) + size);
if(!newBase){
return false;
}
base = newBase;
size += 10;
newBase = nullptr;
}
return true;
} template<typename T> bool Array<T>::add(T item){
if(!ensureCapcity()){
return false;
}
T *p = base + length;
*p = item;
length ++;
return true;
} template<typename T> bool Array<T>::insert(int index,const T item){
if(!ensureCapcity()){
return false;
}
if(index < 1 || index > length){
return false;
}
T *q = base + index - 1;
T *p = base + length - 1;
while( p >= q){
*(p+1) = *p;
p--;
}
*q = item;
q = nullptr;
p = nullptr;
length ++;
return true;
} template<typename T>T Array<T>::del(int index){
if(index<1 || index > length){
return NULL;
}
T *q = base + index - 1;
T item = *q;
++q;
T *p = base + length;
while(q <= p){
*(q-1)=*q;
++q;
}
length --;
return item;
} template<typename T>T Array<T>::objectAt(int index){
if(index<1 || index > length){
return NULL;
}
T *q = base;
return *(q + index - 1);
} template <typename T>void Array<T>::display(){
T *q = base;
T *p = base +length - 1;
while (q<=p) {
cout << *(q++)<<" ";
}
cout << endl;
}

使用:

#include <iostream>
#include "Array.cpp"
using namespace std; int main(int argc, const char * argv[]) {
Array<int> array = *new Array<int>;
array.init();
array.add(1);
array.insert(1,2);
array.objectAt(1);
return 0;
}

动态数组C++实现的更多相关文章

  1. 常用数据结构-线性表及Java 动态数组 深究

    [Java心得总结六]Java容器中——Collection在前面自己总结的一篇博文中对Collection的框架结构做了整理,这里深究一下Java中list的实现方式 1.动态数组 In compu ...

  2. C语言 · 动态数组的使用

    从键盘读入n个整数,使用动态数组存储所读入的整数,并计算它们的和与平均值分别输出.要求尽可能使用函数实现程序代码.平均值为小数的只保留其整数部分. 样例输入: 5 3 4 0 0 2样例输出:9 1样 ...

  3. C++中关于[]静态数组和new分配的动态数组的区别分析

    这篇文章主要介绍了C++中关于[]静态数组和new分配的动态数组的区别分析,很重要的概念,需要的朋友可以参考下 本文以实例分析了C++语言中关于[]静态数组和new分配的动态数组的区别,可以帮助大家加 ...

  4. C++之动态数组

    C99支持一种名为变长数组的结构来方便程序员.C++也提供了一种长度可在程序运行时确定的数组类型:动态数组.声明格式为:(声明 int 类型的数组) ; //此处可修改 ArraySize 的值 in ...

  5. VB默认属性、动态数组、Range对象的默认属性的一点不成熟的想法

    1.默认属性 VB6.0有默认属性的特性.当没有给对象指定具体的属性时,"默认属性"是VB6.0将使用的属性.在某些情形下,省略常用属性名,使代码更为精简. 因为CommandBu ...

  6. C#有关数组内存的释放及动态数组问题

    一.数组内存释放问题 数组内存的释放可以按照如下语句实现: string [] aa=new string[2]; aa[0]="A"; aa[1]="B"; ...

  7. (待续)C#语言中的动态数组(ArrayList)模拟常用页面置换算法(FIFO、LRU、Optimal)

    目录 00 简介 01 算法概述 02 公用方法与变量解释 03 先进先出置换算法(FIFO) 04 最近最久未使用(LRU)算法 05 最佳置换算法(OPT) 00 简介 页面置换算法主要是记录内存 ...

  8. C++ 动态数组实例

    一维动态数组的实例: #include <iostream> using namespace std; int main() { int *arr; int n; cout<< ...

  9. C++动态数组

    一: 一维数组初始化 标准方式1:int value[100]; //value[i]的值不定,因为没有初始化:标准方式2:int value[100] = {1,2,3}; //value[0],v ...

  10. ALLOCATE语句分配FORTRAN动态数组方法(转自http://blog.csdn.net/zhuxianjianqi/article/details/8067174)

    数组的动态分配 a)    可分配数组 数组可以是静态的也可以是动态的.如果数组是静态的,则在编译时就被分配了固定的储存空间,并且直到程序退出时才被释放.程序运行时静态数组的大小不能改变.静态数组的缺 ...

随机推荐

  1. vue1 到 vue2 v-el变成ref

    vue1的写法 div class="menu-wrapper" v-el="menu-wrapper"> <ul class="menu ...

  2. JS 100以内的质数、只能被1和自己整除

    for(var i = 2;i <= 100;i++){ var biao = 1; for(var j = 2;j < i;j++){ if(i%j == 0){ biao = 0; } ...

  3. Eclipse maven工程 Missing artifact com.sun:tools:jar:1.7.0:system 解决方法

    解决方案一:通过maven取运行时参数,eclipse提供的环境变量,基本类似System.getProperty("java.home") <dependency> ...

  4. Django之组合查询

    一 .Django组合查询 很多电商网站中有组合搜索的功能,所谓组合搜索就是网页中组合多个条件,对数据库中进行查询,并且将结果显示在页面中,下面是所做组合查询效果图: 实现代码如下: <1> ...

  5. 铁大FaceBook的使用体验

    铁大FaceBook是一个类似QQ和微信等聊天程序的缩小版网站,并且其针对领域较为狭窄:即只针对校园的学生和导员等人员.但其有值得推广的潜力性和可能性. 对于使用它的体验:第一点我感觉这个网站的界面很 ...

  6. [2] day 02

    1. df.memory_usage()将返回每列占用多少 要包含索引,请传递index=True所以要获得整体内存消耗: 2. numpy.iinfo 3. shift函数 https://blog ...

  7. maven构建本地jar包到本地仓库

    maven命令: mvn:install:install-file -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=1.0 -Dpackaging ...

  8. 《代码敲不队》第八次团队作业:Alpha冲刺 第一天

    项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 作业链接地址 团队名称 代码敲不队 作业学习目标 掌握软件编码实现的工程要求. 第一天 日期:2019/6/15 团队项目 ...

  9. 【codeforces 799A】Carrot Cakes

    [题目链接]:http://codeforces.com/contest/799/problem/A [题意] 你有一个烤炉; 每t秒能同时烤出k个蛋糕; 你可以在第一个烤炉在烤的时候;同时花费d秒建 ...

  10. redis 五大数据类型

    一.String set : 添加数据 get : 获得指定 key 的 value del : 删除指定 key append : 往字符串后面添加       append k1 12345    ...