传递一列2D数组

时间:2014-02-26 09:07:14

标签: c++ c multidimensional-array

假设我有一个2D array,我想将它的 i 列传递给sort function,其中包含1D array并对其进行排序。 可以在不使用array语言将列复制到另一个C/C++的情况下完成。我担心减少使用的time and space。 (当然复杂性保持不变)

3 个答案:

答案 0 :(得分:4)

我认为sort表示来自STL的std::sort,它接受​​随机访问迭代器。所以你需要做的就是提供列迭代器。

您可以自己实现一个(example),使用一些迭代器库(即。Boost.Iterator)或使用一些提供行/列迭代器的矩阵实现。

答案 1 :(得分:2)

如果你可以编写自己的排序功能,那就相当容易;你只需要创建这样的界面:

void Sort (T a [], size_t n,  size_t stride);

密钥位于stride参数中,该参数是此“虚拟”数组元素之间的距离。例如,如果您有一个float x [10][20];并且想要发送它的第2列,那么您可以这样做:(为清晰起见,省略了一些强制转换)

Sort (x[0] + 2, 10, 20); // Usually, stride is the width of the 2D array

Sort函数中,您可以访问具有如下步幅的数组的i元素:

a[i * stride] = 42;

就是这样。

您可以使用相同的原则编写自己的MatrixColumnView类,它包含了这个概念,并且可以传递给带有数组的模板化函数。

如果你想使用STL或类似STL的库,你可以简单地编写自己的MatrixColumnIterator迭代器类,它基本上在内部使用一个步长,并在2D数组的列上进行迭代。

答案 2 :(得分:0)

据我所知,C / C ++中的多维数组存储实际上是一维的,

您可以在这篇文章中引用一个非常好的解释:How to get column of a multidimensional array in C/C++?

因此我认为没有任何默认/简单的方法来提取2D数组的特定列并将其传递给另一个函数。