【发布时间】:2018-11-18 07:49:48
【问题描述】:
我想将矩阵从一个函数传递到另一个函数,所以我这样做了:
#include <cstdlib>
using namespace std;
const int N = 2;
void init_matrix(int (*matrix)[N])
{
for (int i = 0; i < N; ++i)
for (int j = 0; j < N; ++j)
matrix[i][j] = 1;
}
int main()
{
int *x = (int*)malloc(N*N*sizeof(int));
init_matrix( (int (*)[N]) x );
return 0;
}
如何更轻松地拨打init_matrix()?我把它想象成init_matrix(x, N)。
请注意,我有点避免std::vector,因为我很快就会使用并行编程(pthreads、OpenMP、MPI)。
所以我会要求一个没有std 方法来构建矩阵的解决方案。
【问题讨论】:
-
不要在 C++ 中使用
malloc、using namespace std和(C 风格)数组。在此期间,也不要使用new。如果你真的需要一个矩阵而不是consider 创建你自己的矩阵。 -
最好以
std::vector或std::array为基础,而不是使用指针或new -
首先决定你打算使用C还是C++。 C++ 标准库提供了 C 没有的替代方案。两种语言都没有“标准矩阵”。
-
std::vector在使用多线程库时不亚于手动分配内存。 -
@KcFnMi - 那么没有选择。 C 和 C++ 都没有一个通用选项可以让您避免代码中的类型转换。更不用说,如果您坚持使用
malloc()- 当使用malloc()时,C 中的好的做法是 C++ 中的坏做法,反之亦然。因此,您实质上是在寻求一种在两种语言中都可能技术不佳的解决方案。无论您使用哪种语言,并行编程都需要扎实的技术。
标签: c++ matrix multidimensional-array c++14 raw-pointer