分类:
传说中的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); #endif
DynamicArray.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-2024TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术