
国人随便写的
可以存储一些小的数据
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
评价
排名
2
文章
633
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 :
好是好,这个对效率影响大不大哇,效率高不高
一个bug让程序员走上法庭 索赔金额达400亿日元
剑轩 : 有点可怕
ASP.NET Core 服务注册生命周期
剑轩 :
http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256


欢迎加群交流技术