的列比方说,我有一个2D array
,我想通过它的我列到sort function
这需要在1D array
进行排序。 可以在不将该列复制到C/C++
语言中的另一array
的情况下完成。我担心减少使用time and space
。 (Ofcourse的复杂保持不变)传递二维数组
传递二维数组
回答
我想通过sort
你的意思是std::sort
来自STL,它采用随机访问迭代器。所以你需要做的就是提供列迭代器。
你可以自己实现一个(example),使用一些迭代器库(即Boost.Iterator)或使用一些提供行/列迭代器的矩阵实现。
据我所知,多维数组存储在C/C++实际上是一个1D-arrary,
,你可以参考在这篇文章很好的解释: How to get column of a multidimensional array in C/C++?
因此,我不认为有任何默认/简单的方法来提取二维数组的特定列并将其传递给另一个函数。
好了,我发现,在你提到的帖子解释不能完成。 – kamalbanga
Johny写道 - 提供适当的迭代器就足够了。C++世界中的迭代器是最常见的结构,所以我不会说没有'简单'的方式 – zoska
我同意你和我upvote @Johny的答案以及:) 我在想的是,它是相当我很难直接将一列传递给his_own_sort(),而无需使用外部库或预处理... – shole
如果你可以编写你自己的排序函数,这很容易;你只是使界面这样的:
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
迭代器类,该类本质上在内部使用跨度并对二维数组的列进行迭代。
- 1. 传递二维数组
- 2. 传递二维数组到二维数组
- 3. 传递二维数组递归
- 4. 通过函数传递二维数组
- 5. 将二维数组传递到函数
- 6. 将二维数组传递到函数
- 7. 传递到函数的二维数组
- 8. 通过引用传递二维数组
- 9. 从C#传递二维数组到C++
- 10. VB:将二维数组传递给Sub
- 11. 传递二维数组功能在C++
- 12. 传递二维数组的结构
- 13. 一维数组传递为二维数组
- 14. numpy二维数组递归
- 15. C:传递二维数组的一维会导致段错误
- 16. 将二维数组传递给只有一维数组的函数(C++)
- 17. 传递一个二维数组,并使用递归误差
- 18. C,传递2维数组
- 19. 传递多维数组C++
- 20. Lua传递多维数组
- 21. 在C++中通过引用传递二维二维数组结构
- 22. 如何在二维数组中传递构造函数参数?
- 23. 将二维数组输入到函数的传递函数
- 24. C++传递二维数组作为参数的函数?
- 25. 二维数组的递归函数
- 26. 将两个二维数组传递给函数进行比较
- 27. C:传递指针的二维数组作为参数
- 28. 修改二维字符数组传递给C中的函数
- 29. InnoSetup:如何将二维字符串数组传递给函数
- 30. 将动态二维数组传递到函数
我认为你应该可以。只需将2D数组传递给函数即可。但是可能你需要编写自己的排序函数,而不是使用通用的'sort'或'qsort'。 – rcs
@ rcs实际问题很简单。在我来说,我只是想探索是否能在我给了,而不仅仅是解决问题的设置来完成。 – kamalbanga
那么,如果解释你第一索引作为列索引(一个[M] [N] - 第n从第m行列),则可以只通过一个[M]。如果谈论C++,你可以使用向量的载体,不担心有通过一列的长度。 – zoska