我试图找出在C ++中创建矩阵的最佳方法。到目前为止,我有两个选择:
1)一个向量,将所有数据存储在一行"行中,"但是使用模数和算术,可以像2D表一样访问。
OR
2)保持指向其他向量的指针的向量,使得原始向量表示设置列,并且它指向的向量包含沿着每列的行向下的值。
例如,如果我们有这样的表:
Name | Course | Grade
Allen | Chemistry | 76
Rick | English | 84
Mary | Physics | 93
我的第一个例子将所有数据存储在一个向量中,如下所示:
my_vec = {Name, Course, Grade,
Allen, Chemistry, 76,
Rick, English, 84,
Mary, Physics, 93}
(假设存储在同一向量中的值的异构性质现在不是问题)
我的第二个例子将存储数据如下:
vec1 = {Name, Course, Grade};
每个点都包含一个指向矢量的指针(3" sub"此例中的矢量)
Name -> name_vec = {Allen, Rick, Mary}
Course -> course_vec = {Chemistry, English, Physics}
Grade -> grade_vec = {76, 84, 93}
对矩阵的一些要求:
它需要可以成长,这就是我选择在我的例子中使用向量的原因。
它需要能够有效处理大量数据
它必须能够支持行插入(在末尾),行删除(从中间),将一个矩阵附加到另一个矩阵(通过将其列添加到原始矩阵的左端,如果我们可视化它就像一张桌子)
有人知道这些选项中的一个在大型输入上是否会比另一个更有效?或者,是否有人有更好的建议来实现这个矩阵?
答案 0 :(得分:2)
根据我的经验,主要问题是缓存使用率很高。使用模运算与指针访问行并不是一个巨大的胜利,但将数据保存在连续的内存中对于高效访问非常重要。向量的向量可能不会是最有效的,因为除非您使用自定义分配器,否则各个向量可能分散在整个内存中。指向一个连续元素块的部分的指针向量可能更好。
有关如何布置数据的详细信息将取决于您的特定使用模式。在表现方面,你总是需要衡量。