一个类似vector的类

转载于:https://www.cnblogs.com/wuOverflow/p/4098715.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以回答这个问题。在Windows内核中,可以使用ExAllocatePoolWithTag函数来分配内存,然后使用memcpy函数来复制数据。您可以使用这些函数来实现类似vector的库。以下是一个简单的示例代码: ``` #include <ntddk.h> #define MY_VECTOR_TAG 'myvc' typedef struct _MY_VECTOR { PVOID* Data; ULONG Count; ULONG Capacity; } MY_VECTOR, *PMY_VECTOR; NTSTATUS MyVectorCreate(PMY_VECTOR Vector, ULONG InitialCapacity) { Vector->Data = ExAllocatePoolWithTag(NonPagedPool, InitialCapacity * sizeof(PVOID), MY_VECTOR_TAG); if (!Vector->Data) { return STATUS_INSUFFICIENT_RESOURCES; } Vector->Count = 0; Vector->Capacity = InitialCapacity; return STATUS_SUCCESS; } NTSTATUS MyVectorPushBack(PMY_VECTOR Vector, PVOID Element) { if (Vector->Count == Vector->Capacity) { ULONG NewCapacity = Vector->Capacity * 2; PVOID* NewData = ExAllocatePoolWithTag(NonPagedPool, NewCapacity * sizeof(PVOID), MY_VECTOR_TAG); if (!NewData) { return STATUS_INSUFFICIENT_RESOURCES; } RtlCopyMemory(NewData, Vector->Data, Vector->Count * sizeof(PVOID)); ExFreePoolWithTag(Vector->Data, MY_VECTOR_TAG); Vector->Data = NewData; Vector->Capacity = NewCapacity; } Vector->Data[Vector->Count++] = Element; return STATUS_SUCCESS; } VOID MyVectorDestroy(PMY_VECTOR Vector) { ExFreePoolWithTag(Vector->Data, MY_VECTOR_TAG); Vector->Data = NULL; Vector->Count = 0; Vector->Capacity = 0; } ``` 这是一个简单的动态数组实现,可以使用MyVectorCreate函数来创建一个新的vector,使用MyVectorPushBack函数来添加元素,使用MyVectorDestroy函数来销毁vector

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值