分类:
传说中的c
国人随便写的
可以存储一些小的数据
DynamicArray.h
#ifndef _New_DynamicArray_
#define _New_DynamicArray_
typedef struct _vector_array
{
unsigned char* mem_data; //存放我们数组的元素
int max_mele;//当这块内存最大的容量;
int elem_count;//当前这块内存存放的元素个数
int sizeof_elem;//每个元素占的内存大小
}vector_array,*vector_arrayPointer;
//定义配置
//v 表示指向哪个 sizeof_elem元素大小
void vector_define(vector_arrayPointer v, int sizeof_elem);
//清楚
void vector_clear(vector_arrayPointer v);
//往动态数组里面最后存放我们的元素
void vector_push_back(vector_arrayPointer v,const void* elem_ptr);
// 获取第i个元素的地址
void* vector_at(vector_arrayPointer v,int index);
//返回开始第一个数据指针
void* vector_begin(vector_arrayPointer v);
#define vector_size(v) ((v)->sizeof_elem);
// 清理到这个数组所有元素,但是我们还要继续存放
void vector_popall(vector_arrayPointer v);
//删除元素
void Remove_item(vector_arrayPointer v, int start, int count);
//弹出最后一个元素
//并把最后一个给准备好的内存里面
void vector_popback(vector_arrayPointer v, void* out_of_elem);
#endifDynamicArray.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "DynamicArray.h"
//定义自己的堆空间 叫my_malloc
#define my_malloc malloc;
//定义自己的释放方法 my_free
#define my_free free;
//定义自己的扩容方法my_realloc
#define my_realloc realloc;
#define ELEM_STMP 64
//初始化
//v 表示指向哪个 sizeof_elem元素大小
void vector_define(vector_arrayPointer v, int sizeof_elem)
{
memset(v, 0, sizeof(vector_array));
v->sizeof_elem = sizeof_elem;
}
//clear item
void vector_clear(vector_arrayPointer v)
{
if (v->mem_data)
{
my_free(v->mem_data);
v->mem_data = NULL;
v->elem_count = 0;
v->max_mele = 0;
}
}
//存到数组
void vector_push_back(vector_arrayPointer v, const void* elem_ptr)
{
//判断是否还有多余的空间够存储
if (v->elem_count >= v->max_mele)
{
v->max_mele += ELEM_STMP;
my_realloc(v->mem_data,v->max_mele * v->sizeof_elem);
}
//存放元素
memcpy(v->mem_data + v->elem_count * v->sizeof_elem,elem_ptr, v->sizeof_elem);
v->elem_count++;
}
//下标获取值
void* vector_at(vector_arrayPointer v, int index)
{
if (index < v->elem_count && index >=0)
{
return (void*)(v->mem_data + index * v->sizeof_elem);
}
return NULL;
}
//返回开始第一个数据指针
void* vector_begin(vector_arrayPointer v)
{
return v->mem_data;
}
// 清理到这个数组所有元素,但是我们还要继续存放
void vector_popall(vector_arrayPointer v)
{
v->elem_count = 0;
}
void Remove_item(vector_arrayPointer v, int start, int count)
{
if (start < 0 || start >= v->elem_count)
{
return;
}
if (start + count > v->elem_count)
{
count -= (start + count) - v->elem_count;
}
//判断元素大于0
if ((v->elem_count - (start + count))>0)
{
memmove(v->mem_data + start * v->sizeof_elem,
v->mem_data + (start + count) * v->sizeof_elem,
(v->elem_count - (start + count)) * v->sizeof_elem);
}
v->elem_count -= count;
}
void vector_popback(vector_arrayPointer v, void* out_of_elem)
{
if (v->elem_count<=0)
{
return;
}
v->elem_count --;
if (out_of_elem)
{
memcpy(out_of_elem,v->mem_data+v->elem_count * v->sizeof_elem,v->sizeof_elem);
}
}给国人一个小目标,三年后不干c#了!
转型不转行!
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739
评价
排名
6
文章
6
粉丝
16
评论
8
{{item.articleTitle}}
{{item.blogName}} : {{item.content}}
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256
50010702506256
欢迎加群交流技术