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