C++ 动态数组与std::vector

C++ 动态数组与std::vector,c++,performance,stdvector,dynamic-arrays,C++,Performance,Stdvector,Dynamic Arrays,我已经编写了一个小程序,使用朴素除法算法计算素数。为了提高性能,我认为它应该只检查基于先前检测到的小于等于数字平方根的素数的可除性。 为了做到这一点,我需要跟踪素数。我已经用动态数组实现了它。(例如,使用新建和删除)。我应该改用std::vector?就性能而言,哪一个更好?(维护不是问题。) 任何帮助都将不胜感激 理想答案: 我们怎么会知道?这取决于编译器、操作系统、体系结构、标准库实现、行星的对齐方式 对其进行基准测试。可能是跟你。(虽然没有使用过,但它似乎很简单。) 实际答案: 使用std

我已经编写了一个小程序,使用朴素除法算法计算素数。为了提高性能,我认为它应该只检查基于先前检测到的小于等于数字平方根的素数的可除性。 为了做到这一点,我需要跟踪素数。我已经用动态数组实现了它。(例如,使用
新建
删除
)。我应该改用
std::vector
?就性能而言,哪一个更好?(维护不是问题。)
任何帮助都将不胜感激 理想答案:

我们怎么会知道?这取决于编译器、操作系统、体系结构、标准库实现、行星的对齐方式

对其进行基准测试。可能是跟你。(虽然没有使用过,但它似乎很简单。)

实际答案:

使用
std::vector
。你每做一次
new
delete
,都有可能导致内存泄漏,或者重复执行
delete
,或者忘记做些什么
std::vector
基本上都是在幕后进行的。通过最大化优化标志,您更有可能获得相当大的性能提升(如果您使用的是
gcc
,请尝试
-Ofast
-march=native

此外:

维护不是问题


我怀疑。在这件事上相信我。如果没有其他问题,至少对代码进行注释(但这是另一个蠕虫罐)。

出于您的目的,vector可能更好,这样您就不需要担心内存管理(例如,增加数组大小并复制以前的结果),或者保留太多内存来存储结果

std::vector只是动态数组的包装器。因此,我认为直接使用动态数组会更整洁。对吗?一般来说,我会使用带有
new[]
delete[]
的数组,只要我的目的是研究它们是如何工作的,这在处理遗留代码时总是很有用的,例如,用纯C编写的库。对于其他情况,使用
std::vectors
。实际上,我只是一个数学爱好者(而不是学生),他们学习C++是为了好玩。除了一些朋友之外,没有打算把它给任何人。那么,在这种情况下,你有什么建议?@FabioIf你是C++新手,想做实验:首先用新的/DELL实现你的算法。您可能会看到,您必须非常小心,以免产生内存泄漏。然后使用STD::向量,你不仅可以学习如何使用它,而且还可以理解它是如何容易地工作,而不是用原始数组。“维护不是问题。”-请,请来做我的工作。正如我在评论中所说,我正在学习C++只是为了好玩…所以,实际上,维护不是一个问题。除了我的一些朋友之外,没有人会使用它。实际上,保留太多内存或增加数组大小并不重要。因为它们很容易使用给定的输入进行比较。