Tri*_*ick 19 c++ arrays dynamic matrix multidimensional-array
在C++中我想做类似的事情:
int n = get_int_from_user();
char* matrix = new char[n][n];
matrix[0][0] = 'c';
//...
matrix[n][n] = 'a';
delete [][] matrix;
Run Code Online (Sandbox Code Playgroud)
但当然这不起作用.做类似事情的最佳方法是什么?我已经看到了一些解决方案,但它们看起来非常混乱.
Bri*_*ndy 24
手动动态方式:
假设你想要一个宽度*高度的数组,最有效的方法就是使用一维数组:
char *matrix = new char[width*height];
Run Code Online (Sandbox Code Playgroud)
要删除它:
delete[] matrix;
Run Code Online (Sandbox Code Playgroud)
要访问它:
char getArrayValue(char *matrix, int row, int col)
{
return matrix[row + col*width];
}
Run Code Online (Sandbox Code Playgroud)
要修改它:
void setArrayValue(char *matrix, int row, int col, char val)
{
matrix[row + col*width] = val;
}
Run Code Online (Sandbox Code Playgroud)
增强矩阵:
如果您可以拥有依赖项,请考虑使用boost :: matrix.
然后你可以绑定到boost线性代数库.
这是一些boost :: matrix的示例代码:
#include <boost/numeric/ublas/matrix.hpp>
using namespace boost::numeric::ublas;
matrix<char> m (3, 3);
for (unsigned i = 0; i < m.size1 (); ++ i)
for (unsigned j = 0; j < m.size2 (); ++ j)
m (i, j) = 3 * i + j;
Run Code Online (Sandbox Code Playgroud)
在一些编译器的堆栈上:
有些编译器实际上允许您使用运行时确定的大小在堆栈上创建数组.g ++是这种编译器的一个例子.但是,默认情况下VC++不能这样做.
所以在g ++中这是有效的代码:
int width = 10;
int height = 10;
int matrix[width][height];
Run Code Online (Sandbox Code Playgroud)
Drew Hall提到这个C99功能称为可变长度数组(VLAs),它可能在任何现代编译器中都可以打开.
我通常做这样的事情:
char *matrix = new char [width * height];
matrix[i + j * width] = 'c'; // same as matrix[i][j] = 'c';
delete [] matrix;
Run Code Online (Sandbox Code Playgroud)
您似乎错过了 C++(带有类的 C)的全部要点:-)。这是一种迫切需要类来实现它的用途。
您可以只使用 STL 或其他 3rd 方类库,我确信它们具有您正在寻找的数据结构,但是,如果您需要自己推出,只需创建一个具有以下属性的类。