使用 std::vector 的开销?

新手上路,请多包涵

我知道手动动态内存分配通常是一个坏主意,但有时它是否比使用 std::vector 更好的解决方案?

举一个粗略的例子,如果我必须存储一个 n 整数数组,其中 n <= 16,比如说。我可以使用它来实现它

int* data = new int[n]; //assuming n is set beforehand

或使用向量:

 std::vector<int> data;

使用 std::vector 绝对总是一个更好的主意,还是在实际情况下手动分配动态内存会是一个更好的主意,以提高效率?

原文由 Vivek Ghaisas 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 822
2 个回答

最好使用 std::vector / std::array ,至少在您可以 _最终证明_(通过分析) T* a = new T[100]; 解决方案在您的具体情况下要快得多.这不太可能发生: vector / array 是一个非常薄的层,围绕着一个普通的旧阵列。使用 vector::at 进行边界检查会有一些开销,但您可以使用 operator[] 来规避这一点。

原文由 us2012 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果您事先知道大小(尤其是在编译时),并且不需要 std::vector 的动态调整大小功能,那么使用更简单的东西就可以了。

但是,如果您有 C++11,则最好是 std::array ,否则最好是 boost::scoped_array

我怀疑除非它显着减少代码大小或其他东西,否则效率会大大提高,但它更具表现力,无论如何都是值得的。

原文由 Useless 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题