【问题标题】:Vectors vs Array in C++ [duplicate]C ++中的向量与数组[重复]
【发布时间】:2019-09-25 19:00:07
【问题描述】:

我正在一个项目中使用向量,因为数组的大小最初是未知的。使用数组而不是向量是否会减少代码的运行时间?如果是,那么我如何初始化/声明未知大小的数组,即数组的大小是可变的(基于输入)? "OR" 只使用向量更好吗?

注意:- 我想知道哪个更好地减少程序的执行时间。

【问题讨论】:

  • 你指的是std::array吗?请提供一些更详细的信息,最好是一个小的代码示例。
  • std::vector 是正确的锤子,如果在编译时未知数组的大小是钉子。 std::vector 像数组一样连续存储内容。只要在运行时知道大小,就可以使用std::vector::resize()std::vector::reserve() 防止重新分配。恕我直言,您的担心是不必要的。
  • @skratchi.at 我指的是通常的数组,比如我们在 C 中使用的数组。如果它减少了程序的运行时间,一切都很好
  • 有很多答案。我看了一眼投票数最高的四个。其中一位提到了我上面所说的。请注意关于“微优化器”的内容 - 恕我直言,非常值得考虑(好的 - 它反映了我自己的观点。);-)
  • 关于访问,std::vector 应该与std::array 竞争,因为std::vector::operator[]() 只是一个“薄包装”。 (可以像数组一样用于读写访问。)在调试模式下,它还支持范围检查(数组通常不支持),这是非常有价值的。唯一的额外成本是分配,但分配带有new[] 的动态数组也会有它。

标签: c++ visual-studio runtime


【解决方案1】:

在编程和生活中一样,没有免费的饭菜……请始终牢记这一点。如果你想要好的和方便的功能,你必须付出代价。

std::vector 会给你的代码增加一些你看不到的复杂性。将项目添加到您的 std::vector 会做更多事情,然后只需写入一个值。它可能会分配新内存并将旧值复制到其中。还有一些你不会真正看到的东西。

切换到std::array 不会给您带来您可能想要的提升。它比std::vector 简单一些。当您正在寻找普通 c 数组的补充时,这是获得的方式。但是,它也会增加复杂性。

所以我的建议是,你会在好书中找到类似的东西。尝试基于算法而不是实现来优化您的代码。可能有缺陷的算法有更大的潜力,或者曾经有过更好的机会。该实施不会为您提供地面制动助力。

【讨论】:

  • 我想补充一点,std::vector 可能与您自己合理实现“动态数组”一样有效。所以通常没有理由担心性能。
  • 确实如此。自行实现的版本可能无法达到标准库的性能。所以建议是,使用经过良好测试和高度优化的一次。
猜你喜欢
  • 1970-01-01
  • 2014-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 2016-02-16
  • 1970-01-01
相关资源
最近更新 更多