在c++中创建池概念
Making a pool concept in c++
我有一个结构
struct Employee
{
char uName [255];
struct Employee * next;
struct Employee * prev;
};
我只想一次分配100个结构对象的内存,然后一个接一个地使用它们,我制作了一个链表。如果内存被完全消耗,那么我想再次分配100个对象内存
我以的身份进行分配
struct Employee * chunk=new struct Employee[100];
现在,当我想向链表添加一个新节点时,我想从这个已经分配的内存中获取对象。有人能告诉我们如何实现吗
Employee * pEmployeeData=NULL;
for(long int i=1;i<=100;i++)
{
pEmployeeData=EmployeePool+i;
pEmployeeData->next=NULL;
pEmployeeData->prev=NULL;
InsertAtEnd(pEmployeeData);
}
其中InsertAtEnd在链表的末尾插入节点。请说明如何实现此
我强烈建议您不要试图通过编写自己的链表来重新发明轮子,而是查看C++标准库,该库包含可供您使用的现成容器类型。(例如std::vector
和std::list
)。
容器类型存在于C++标准库中,用于存储数据/对象的集合。例如,你可以做一些类似的事情
#include <iostream>
#include <vector>
#include <string>
struct Employee
{
std::string name;
int id;
};
int main()
{
std::vector<Employee> my_employees;
Employee fred = { "Fred", 1 };
Employee bob = { "Bob", 2 };
my_employees.push_back( fred );
my_employees.push_back( bob );
std::cout << my_employees[0].id << " " << my_employees[0].name << "n"
<< my_employees[1].id << " " << my_employees[1].name << std::endl;
}
标准容器易于使用和学习(你会发现大量的互联网资源描述了如何使用它们,你的书也应该告诉你!);如果你是C++的新手,那么在尝试创建自己的C++之前,最好先弄清楚如何使用这些。
您可以覆盖类的new
和delete
运算符。
new
必须查看任何现有的池,看看是否有空闲对象,如果没有,则需要分配一个池。然后,它将返回从中分配的内存。
delete
需要检查所提供对象分配到的池。如果其中仍分配有ANY对象,则该池将保留,否则,可以删除该池。
此外,由于您使用的是C++,请考虑使用一个完整的类(尽管差别很小)
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 使用std::multimap迭代器创建std::list
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 使用CMake创建QML插件
- 如何在c++中为模板函数实例创建快捷方式
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 试图在visual studio上用C++创建一个桌面应用程序
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 如何在C++20中创建模板别名的推导指南
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 如何创建一个空的全局类并在启动时实例化它
- 无法创建抽象类的实例
- 链接到自行创建的dll失败
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何在C++类内存结构中创建"spacer"?
- 终端不会为C++文件创建.exe文件吗
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息