动态数组与 std::vector
Dynamic arrays vs. std::vector
我编写了一个小程序来使用朴素除法算法计算素数。为了提高性能,我认为它应该只检查基于先前检测到的小于等于数字平方根的素数的整除性。
为此,我需要跟踪素数。我已经使用动态数组实现了它。 (例如,使用 new
和 delete
)。我应该改用 std::vector
吗?哪个在性能方面更好? (维护不是问题。)
任何帮助,将不胜感激。
理想答案:
我们怎么知道?这取决于您的编译器、您的 OS、您的体系结构、您的标准库实现、行星的排列...
对其进行基准测试。可能与 this。 (没用过,不过用起来好像很简单)
实用答案:
使用std::vector
。您创建的每个 new
和 delete
都是内存泄漏或双 delete
或忘记做某事的机会。 std::vector
基本上是在后台执行此操作。通过最大化优化标志,您更有可能获得相当大的性能提升(如果您使用 gcc
,请尝试 -Ofast
和 -march=native
)。
还有:
Maintenance is not an issue.
怀疑。相信我这一点。如果没有别的,至少评论你的代码(但那是另一个蠕虫)。
就您的目的而言,向量可能更好,这样您就不必担心内存管理(例如,增加数组大小和复制以前的结果),或预留太多内存来存储结果。
我编写了一个小程序来使用朴素除法算法计算素数。为了提高性能,我认为它应该只检查基于先前检测到的小于等于数字平方根的素数的整除性。
为此,我需要跟踪素数。我已经使用动态数组实现了它。 (例如,使用 new
和 delete
)。我应该改用 std::vector
吗?哪个在性能方面更好? (维护不是问题。)
任何帮助,将不胜感激。
理想答案:
我们怎么知道?这取决于您的编译器、您的 OS、您的体系结构、您的标准库实现、行星的排列...
对其进行基准测试。可能与 this。 (没用过,不过用起来好像很简单)
实用答案:
使用std::vector
。您创建的每个 new
和 delete
都是内存泄漏或双 delete
或忘记做某事的机会。 std::vector
基本上是在后台执行此操作。通过最大化优化标志,您更有可能获得相当大的性能提升(如果您使用 gcc
,请尝试 -Ofast
和 -march=native
)。
还有:
Maintenance is not an issue.
怀疑。相信我这一点。如果没有别的,至少评论你的代码(但那是另一个蠕虫)。
就您的目的而言,向量可能更好,这样您就不必担心内存管理(例如,增加数组大小和复制以前的结果),或预留太多内存来存储结果。