有啥可以代替多维数组?
Posted
技术标签:
【中文标题】有啥可以代替多维数组?【英文标题】:Anything instead of multidimensional arrays?有什么可以代替多维数组? 【发布时间】:2011-12-07 07:07:06 【问题描述】:由于向量比 C++ 中的数组更受欢迎,我想问一下,如果您想以多维数组形式(m 行,n 列)存储数据,您通常建议使用哪种结构。向量的向量是一种合理有效的做法吗?
【问题讨论】:
是的。不知道还能说什么。 Multi-Dimensional Array ( C++ ) 的可能重复项 【参考方案1】:std::vector< std::vector<int> > matrix
没有任何问题。
但是,如果您的多维结构的大小是固定的(即 m x n)并且您不需要std::vector
提供的额外功能,那么std::array
可能是一个不错的选择.
【讨论】:
是否可以有 typedef 模板?例如。typedef matrix<T> vector<vector<T> >
@WTP:它在 C++11 中。 AFAIK Clang 和尚未发布的 GCC 4.7 支持它们。
@WTP:即使有可能,您认为这样做是帮助还是阻碍?我知道我个人不喜欢typedef
它。【参考方案2】:
是的,向量的向量是一种合理的做法。为什么你认为不是? 有效取决于您是否提前知道元素的数量。 如果不是,那么无论如何您都不能在 C++ 中使用可变长度数组,因此向量是一个不错的选择。
使用 C++11 std::array
也是一个不错的选择。
【讨论】:
【参考方案3】:取决于您想要实现的目标。可以使用向量的向量,但是当您想使用公式 row + row_size * column 访问元素时,您也可能有一个唯一的数组/向量并计算索引...使用向量可能会使用比您需要的更多的内存,所以如果您的矩阵非常庞大,这可能不是最佳解决方案。
如果您使用数字,您还可以查看 boost::uBLAS,它是一个矩阵库,具有许多可能的存储策略(按行、按列、压缩、三角形...) - 每个建议矩阵模型适合特定问题以获得最佳性能或限制分配的内存。
我认为您应该研究所有可能的存储方法并选择最适合您的问题的一种。
【讨论】:
以上是关于有啥可以代替多维数组?的主要内容,如果未能解决你的问题,请参考以下文章