【发布时间】:2015-07-21 19:47:21
【问题描述】:
以前,我一直在使用指针创建类Object 的二维数组,语法如下:
Object** myArray = new Object*[row_num];
for (int i = 0; i < row_num; i++)
{
myArray[i] = new Object[col_num];
[skip]
}
但是,很多人一直建议我使用vector<vector<Object>> 而不是Object**。
就我而言,向量需要更多内存作为权衡,以便更轻松地更改数组大小。 但是,由于我需要的二维数组用于网格的回溯算法(一旦确定它就永远不会改变它的维度),我觉得没有必要改变它们。
vector 还有其他我不知道的优势吗?
【问题讨论】:
-
一个好处是你永远不需要记得打电话给
delete -
另一个是,只要你使用
at函数,你就可以大大减少未定义行为的机会。另见here -
如果内部向量具有恒定大小,则
vector<vector<Object>>不好。有了这个,在一些类中封装一个vector -
即使您当前的方法也确实没有达到最佳效果。鉴于您声明您的数组不会改变维度,您的实现可以通过只调用 2 次
new(然后只调用 2 次delete)来优化,无论行数如何。 stackoverflow.com/questions/21943621/… -
另外,不要被
vector“占用更多内存”的说法分心。这本质上是错误的,所涉及的额外内存将很小,您永远不会注意到它。另一方面,vector有无数辉煌的优势。事实上,您可能会使用vector编写更快(并且可能更节省内存)的代码,因为您将能够了解您的算法的大局并(安全地)推动更好的算法。