在C ++中表达动态记录的好习惯是什么?
我正在尝试编写一个处理动态记录的代码,记录的长度与它的类型不同。我所表达的目标没有太多可以应用的操作,可以直接从程序员那里访问,所以我认为它应该是struct
而不是class
。
记录的大小在构造上是固定的,每次执行的记录数可能从几百到几千万。
我想我有三种选择。首先是使用固定大小的数组来获得记录的最大可能项的长度。最大可能长度是已知的,长度从1到最大10不等。 编辑:记录有一些共同的条目
第二个选项是为每个记录创建一个动态数组。在这种情况下,使用std::vector
而不是自己操纵分配应该更好吗?或者使用STL总是比自己实现它更好?
第三种选择是使用具有多态性的继承。我不想实际做到这一点,因为没有多少"普通"操作甚至任何要应用的操作。
我想要的另一个功能是,因为它将是一个记录,我希望可以使用字符串或至少一个类似名称的方法访问。这不是强制性的,但我认为这可能有利于未来的代码可读性。我可以使用std::map
而不是动态数组或std::vector
我认为在这种情况下我想要一些像C#属性一样的get / setter(C ++没有)。
所以我没有什么可考虑的。一件事是未来代码的可读性。如果我牺牲了可读性,那么我只能通过索引访问记录,而不是通过名称访问记录。另一件事是性能和内存使用情况。我想高度避免"字符串"在std :: map期间可能发生的比较操作,并且由于需要处理大量记录,因此也希望使用最少量的内存。
到目前为止,在做一些个人项目时,我确实想过选择使用哪种数据结构,但实际上推理并不好。请分享您的见解,或者最好是您推荐我阅读的文献(不仅有哪些主题有通用算法和数据结构的东西,还有真实的编码实践,可以解释深入的STL)。
编辑:我正在记录AI的行为。 AI通过2d空间。我试图记录每个AI的行为。角色(AI)可以生成,删除,进入房间,留下空间,可以杀死其他AI,也可以被杀死等等。我正在尝试记录行为。 (不是全部)但有些记录是..
Type_Enter_Room : LogType | AI_ID | Room_ID | EnterTime
Type_Leave_Room : LogType | AI_ID | Room_ID | LeaveTime
Type_Attack_AI : LogType | AttackerAI_ID | TargetAI_ID | AttackTime | Location
Type_AI_Dead : LogType | AI_ID | DeadTime | DeadPlace
记录共享一些项目,但也有不同的条目。并且所有记录都应该在内存中以执行我想要应用的操作。