繁体   English   中英

C++ 中“低级”容器数据的原始指针、智能指针或 std::vector

[英]Raw pointer, smart pointer or std::vector for “low-level” container data in C++

假设我正在制作自己的 Matrix 类/容器,它本身需要管理某种双精度数组和行/列维度。

冒着听起来不自然的风险,如果速度很重要,如何存储这些数据被认为是“最佳实践”? 我可以看到的选项是:

  • 指向单个动态 C 数组的原始指针
  • 指向 C 数组的唯一指针,类似于/导致我们...
  • 双打的 std::vector

这些不同选项的速度影响是什么? 显然它确实取决于情况,但在一般情况下呢? 此外,对我来说,MSVC 和 GCC 上的 std::vector 的大小是 24 个字节,表示指向开始迭代器、结束迭代器和 memory 分配结束的 3 个指针。 由于我需要自己存储大小以了解矩阵维度,因此最终迭代器对我来说有点无用,希望与算法一起使用。

对此最佳实践有何想法? 由于容器有点“低级”,因此使用原始指针是否可以接受?

谢谢!

我会使用std::vector因为它解决了 memory 分配、解除分配、索引、复制等问题。除非您将同时使用“数百万”个矩阵,否则额外的成员( capacity )可能不相关。

无论如何,优化库的速度是您最不想做的事情——在您可以测试初始实现的实际速度之后。 然后你可以决定是否值得花时间用你自己的实现有效地复制std::vector功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM