一些程序员似乎非常讨厌多维数组,而另一些人则认为它们还可以。我知道任何可以对多维数组执行的操作也可以对普通数组执行,因此它们在功能上是等效的。使用多维数组是否是不好的实践,还是无关紧要的?
一些程序员似乎非常讨厌多维数组,而另一些人则认为它们还可以。我知道任何可以对多维数组执行的操作也可以对普通数组执行,因此它们在功能上是等效的。使用多维数组是否是不好的实践,还是无关紧要的?
你是否需要存储预先知道维度的多维数据?如果是,使用多维数组。
如果你不知道维度 (即,你将需要动态分配数组),那么你需要:
具体用例取决于情况,但通常我更喜欢前者,因为它使内存管理更简单,少了堆内存分配。无论哪种方法,随着维数增加,复杂度都会增加。但在我看来,由于额外的间接级别,后一种方法的复杂度增长速度要快得多。
多维数组相对于 Vector<Vector<>>
的优点:
缺点:
基本上,对我来说,问题在于缺乏边界检查。
vector<vector<T>> a(1, vector<T>(1)); a[0][0] = ...
是可以的。 - Potatoswattervector<vector<>>
。 - Ben Voigt多维数组相对于 Vector<Vector<>>
有以下优点:
在C++中,我不喜欢多维数组,因为它们应该被替换为std::vector<std::vector<t> >
。如果你想表示一个std::vector<std::basic_string<t> >
,它们也特别重要。
多维数组是如此简单的原始数据类型,我很惊讶大多数人会关心它。然而,使用单个维度的设计可能比使用多个维度更好,其他所有条件相等的情况下。
可能可以将多维数据存储在单一数据数组中,但您必须自己跟踪索引。实际上,多维数组在内存中作为单个维度数组存储,并具有支持表示该数据为多维的语法。
如果您正在处理多维数据,则选择正确的工具(多维数组)是最合适的。
std::valarray
与std::slice
是标准的抽象化方法。http://www.boost.org/doc/libs/1_42_0/libs/multi_array/doc/index.html
我知道任何可以对多维数组进行的操作也同样可以对普通数组进行操作。
我不认为这完全准确。我们需要一个指针数组来存储像名字列表这样基本的东西,然后对其进行排序。或者需要指向指针的指针来存储可变长度的字符串,然后是这些字符串的列表。 由于原始问题仅涉及数组本身,因此无法看到如何在普通数组中以相等的轻松程度解决这些问题。请考虑不仅将字符串存储在1-D数组中(可能使用某种分隔符),而且还执行诸如排序之类的操作。