当前位置:  开发笔记 > 编程语言 > 正文

在C++中表示二维数组的最佳方法,其大小在运行时确定

如何解决《在C++中表示二维数组的最佳方法,其大小在运行时确定》经验,为你挑选了2个好方法。

在C++中我想做类似的事情:

int n = get_int_from_user();

char* matrix = new char[n][n];

matrix[0][0] = 'c';
//...
matrix[n][n] = 'a';

delete [][] matrix;

但当然这不起作用.做类似事情的最佳方法是什么?我已经看到了一些解决方案,但它们看起来非常混乱.



1> Brian R. Bon..:

手动动态方式:

假设你想要一个宽度*高度的数组,最有效的方法就是使用一维数组:

char *matrix = new char[width*height];

要删除它:

delete[] matrix;

要访问它:

char getArrayValue(char *matrix, int row, int col)
{
  return matrix[row + col*width];
}

要修改它:

void setArrayValue(char *matrix, int row, int col, char val)
{
  matrix[row + col*width] = val;
}

增强矩阵:

如果您可以拥有依赖项,请考虑使用boost :: matrix.

然后你可以绑定到boost线性代数库.

这是一些boost :: matrix的示例代码:

#include 
using namespace boost::numeric::ublas;
matrix 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;

在一些编译器的堆栈上:

有些编译器实际上允许您使用运行时确定的大小在堆栈上创建数组.g ++是这种编译器的一个例子.但是,默认情况下VC++不能这样做.

所以在g ++中这是有效的代码:

int width = 10;
int height = 10; 
int matrix[width][height];

Drew Hall提到这个C99功能称为可变长度数组(VLAs),它可能在任何现代编译器中都可以打开.



2> Jeremy Ruten..:

我通常做这样的事情:

char *matrix = new char [width * height];

matrix[i + j * width] = 'c'; // same as matrix[i][j] = 'c';

delete [] matrix;

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有