如何解决现代C ++中的动态数组
对于面向性能的库,我们目前使用std :: arrays,其长度取决于问题。
结果是,整个代码都使用 鉴于以下情况,我们如何以最现代的方式替换这些数组: 我的第一个想法是在结构中包装一个T模板的unique_ptr 我的问题是:
解决方法
这些数组的长度在0到5之间
一个好的解决方案是为每个数组使用长度为5的自动数组。与动态分配开销相比,可能丢失的0-4个整数的内存可能微不足道。
一个可能更好的选择是根据使用模式为std::vector
自定义分配器。但是这些工作很多。
如果执行代码中的分配,则应用程序的启动时间无关紧要,并且向量的最大大小的大小是已知的,这可能比使用std :: vector和reserve的简单解决方案要好。
但是似乎您需要的是一种用于std :: string的小字符串优化(SSO)。如果数据的大小足够小以适合表示字符串的类的大小(减去标记成员的大小),则该技术允许将数据存储在堆栈上。通常,这是一个普遍的问题,以前很多人已经解决过。
有几种选择:
- 如果您的类型类似于char,请使用std :: basic_string。
- [依赖关系]使用增强small_vector
- [Dependency]愚蠢的small_vector
- 根据std :: array编写自己的实现(但不要从std :: array派生,只需在您的类中使用它即可),但要保留更多的内存。
- 用SSO编写自己的向量。
选择还取决于您要存储的对象的大小。变体1,2,3可以很好地用于一些POD,但可能需要分配更大的尺寸。变体4可能是最容易实现的,并且可以与POD和类一起使用,但始终需要额外的内存。同样,这类似于带有保留的std :: vector,只是数据将分配在堆栈上,而不是堆上。变体5可能是一个过大的杀伤力,也许您不需要它那么多功能。
,您在问题中写道,在运行时中知道大小,在这种情况下,我不明白您以前的模板化解决方案是如何工作的,因为应该在编译时知道N1和N2 使其正常工作。
抛开这些,您可以使用固定大小的向量(std :: array),如以下内容所述:C++ vector of fixed size vecors
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。