传递一列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数组的特定列并将其传递给另一个函数。