2019独角兽企业重金招聘Python工程师标准>>>

#ifndef STD_VAL_ARRAY_H_
#define STD_VAL_ARRAY_H_class StdValArray {
public:StdValArray();StdValArray(int _element_size, int _pre_allocated_size = 0);~StdValArray();void Add(void *_data);void *GetIndex(int _index) const;int GetSize() const;void **GetData() const;bool IsEmpty() const;void *operator [](int _index) const;void Remove(int _index);
private:int element_size;int element_count;int allocated_count;void **p_value;
};  #endif // STD_VAL_ARRAY_H
/*StdValArray.cppGeneral Array Containerlvqinghou 2011-03-21 15:46
*/#include "StdValArray.h"#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;StdValArray::StdValArray() : element_size(0),element_count(0), allocated_count(0),p_value(NULL)
{
}StdValArray::StdValArray(int _element_size, int _pre_allocated_size /*= 0*/) : element_size(_element_size), element_count(0), allocated_count(_pre_allocated_size), p_value(NULL)
{if (allocated_count == 0) {allocated_count = 13;}p_value = (void **)malloc(element_size * allocated_count);memset(p_value, 0, element_size * allocated_count);
}StdValArray::~StdValArray()
{free(p_value);
}void StdValArray::Add(void *_data)
{void **p_tmp = NULL;if (++element_count > allocated_count) {allocated_count *= 2;p_tmp = (void **)malloc(element_size * allocated_count);memset(p_tmp, 0, element_size * allocated_count);memcpy(p_tmp, p_value, element_size * (element_count - 1));free(p_value);p_value = p_tmp;p_tmp = NULL;}memcpy(p_value + element_size * (element_count - 1), _data, element_size);
}void *StdValArray::GetIndex(int _index) const
{if (_index > element_count || _index <= 0)return NULL;return (p_value + element_size * (_index - 1));
}int StdValArray::GetSize() const
{return element_count;
}void **StdValArray::GetData() const
{return p_value;
}bool StdValArray::IsEmpty() const
{return (element_count == 0);
}void *StdValArray::operator [](int _index) const
{if (_index > element_count || _index <= 0)return NULL;return (p_value + (_index - 1) * element_size);
}void StdValArray::Remove(int _index)
{if (_index > element_count || _index <= 0)return ;int i = _index;for (i = _index; i < element_count; i ++)memcpy(p_value + element_size * (i - 1), p_value + element_size * i, element_size);element_count --;memset(p_value + element_size * element_count, 0, element_size);
}

转载于:https://my.oschina.net/tonyyang/blog/14419

通用数组(练习,可能有错)相关推荐

  1. 无法创建t的通用数组_创建通用数组的问题

    无法创建t的通用数组 在这篇文章中,我们将介绍一篇全面的文章,其中介绍了创建通用数组的问题. Java编程语言于2004年9月在Java 5.0" Tiger"发行版中添加了泛型. ...

  2. 【原创】VBA学习笔记(300)VBA 很多工作表函数都只对1维数组有用,用2维数组上经常报错!

    1 VBA 很多工作表函数,都只对一维数组有用,用2维数组上经常报错 很多工作表函数都不能对二维数组生效 有时候连错误值都不返回,直接代码中断) 2 举例1:join() 和 split() 函数 只 ...

  3. c语言给数组赋值 报错,请教为什么给数组赋值会报错

    请问为什么给数组赋值会报错? 请问为什么info[index][0]=str;这种赋值语句总是会报错呢? 请高手指教,非常感谢!! #include #include #include int sys ...

  4. JavaScript超出数组长度不报错

    JavaScript超出数组长度不报错 今天,在做题的时候,遇到了这样一个问题 while (sum < target) {right++;sum += nums[right]; } 这里whi ...

  5. C++模板笔记十:类模板案例:通用数组类

    案例描述: 实现一个通用的数组类,要求如下: 可以对内置数据类型以及自定义数据类型的数据进行存储. 将数组中的数据存储到堆区 构造函数中可以传入数组的容量 提供对应的拷贝构造函数以及operator= ...

  6. 关于C++中数组下标越界不报错的问题

            C++中数组下标越界程序并不报错是因为编译器不会对数组下标作越界检查造成的. C语言非常重视运行时的效率,所以没有进行数组越界检查,而C++继承了C的效率要求,自然也不做数组越界检查. ...

  7. 给内部类对象数组属性赋值时报错:Exception in thread main java.lang.NullPointerException...

    前言 1255: 打怪升级(Java),写这个题目程序的时候,控制台提示如下错误: Exception in thread "main" java.lang.NullPointer ...

  8. python二维数组读取数报错TypeError: list indices must be integers or slices, not tuple

    如果直接使用如下方法构造二维数据: test_list = [[0] * 5 for _ in range(5)] 取数时报错TypeError: list indices must be integ ...

  9. 算法_栈的Java的通用数组实现

    栈是一个常用的最简单的数据结构,这里提供了其实现.内部维护了一个数组,并且可以动态的调整数组的大小.而且,提供了迭代器支持后进先出的迭代功能.Stack的实现是所有集合类抽象数据类型实现的模板,它将所 ...

最新文章

  1. Pascal 错误代码及含义
  2. 网域环境如何让用户自行修改密码
  3. Linux软件包管理基本操作入门
  4. 关于在Flask中使用Restful
  5. [css] 在rem下如何实现1像素?
  6. Netty工作笔记0046---TaskQueue自定义任务
  7. SQL Server中的MTVF和CE模型变化
  8. 成绩排序--清华机试真题;使用运算符重载
  9. 15、AutoLayout使用UIScrollView
  10. 如何进行cad地理配准_地理配准和空间校正操作流程
  11. Doom3 couldn't load default.cfg
  12. 百度网盘不开通会员5M/S下载方法
  13. 增强现实(AR)、虚拟现实(VR)、混合现实(MR)之间有什么区别?
  14. 网站是用什么来赚钱的?
  15. TM4C123G学习记录(2)--GPIO
  16. vue路由懒加载resolve方式与import方式
  17. 激光打印机工作原理1
  18. 小学生用哪种护眼灯好?四款平价护眼台灯
  19. 一起分析Linux系统设计思想——03内核启动流程分析(六)
  20. 利用淘宝指数做产品数据分析

热门文章

  1. python17个常见问题_17个Python 常见错误的分析,你都遇到过哪些?
  2. python Pool常用函数用法总结
  3. 同济大学计算机云南2019,同济大学录取分数线2019(在各省市录取数据)
  4. 左线性文法和右线性文法_线性代数期末考试复习资料
  5. doxygen 注释规范_编程规范 - doxygen注释规范示例(C++)
  6. C语言开发单片机如何避免全局变量过多混乱
  7. php导包,Thinkphp5.1 导入第三方包的问题
  8. 【MySQL】Java中的 JDBC 编程
  9. poj1273(最大网络流问题模版)
  10. 枚举 ---- Codeforces Round #711 (Div. 2) D. Bananas in a Microwave[枚举暴力+思维优化]