传递一列2D数组

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

我想通过sort你的意思是std::sort来自STL,后者采用随机访问迭代器。 所以你需要做的就是提供列迭代器。

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

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

 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迭代器类,它基本上在内部使用一个步长,并在二维数组的列上进行迭代。

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

你可以在这篇文章中引用一个非常好的解释: 如何在C / C ++中获取多维数组的列?

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