多维动态矩阵我怎样才能创建一个

multidimensional dynamic matrix how can i create one?

本文关键字:创建 一个 动态      更新时间:2023-10-16

我在Ubuntu上使用C++。我想知道如何创建一个具有动态长度的矩阵?

我做了这个:int matrix[12][],但它不起作用。在我的代码中,列的维度将逐步增加。有人能给我看一个例子中的正确代码吗?

int ** matrix;
matrix = new int* [rowcount];
for (int i = 0; i<rowcount; ++i)
{
   matrix[i] = new int[colcount]
}

清理:

for(int i = 0; i < rowcount; ++i)
    delete [] matrix[i];
delete [] matrix;

当然,当您使用向量时,内存管理是自动完成的;

vector<vector<int> > matrix(rowcount, vector<int>(colcount));

您可能需要查看boost ublas库。它是一个数字库,所以有你期望的运算,比如矩阵乘法,但它与c++-std类似,因为它通过模板(比如std::vector<Type>)接受任意类型。

你可以在这里找到文档,矩阵类型在这里

优点:

  • 它为你管理内存
  • 它的效率
  • 它已经有很多算法可供您使用(如果您使用vector<vector<type> >矩阵,则必须重写这些算法)

缺点:

  • 动态添加行和列是不可能的——您必须将整个矩阵复制到一个新的、更大的矩阵中

我可以使用vector

typedef std::vector< std::vector<int> > Matrix;
Matrix matrix;
matrix.resize(12); // 12 rows.
// Add one more coulmn
for ( Matrix::iterator iter = matrix.begin(); iter != matrix.end(); ++iter )
  (*iter).push_back(new_column_value);

如果列的数量在程序过程中发生了变化,但行的数量没有变化(这就是我阅读问题的方式),那么您应该将矩阵表示为column-major。这意味着,第一个索引应该表示列,第二个索引应该代表行。然后,将矩阵表示为std::vector< std::vector<int> >。现在,如果要添加一列,只需添加另一个向量即可。如果存储矩阵行主,则必须调整所有内部向量的大小才能添加额外的列。

如果您无论如何都想使用indeces行主项(因为这是惯例),您可以将矩阵包装在类中以切换索引。

您可以为此目的使用Vectors。

创建动态改变其大小的矩阵的最简单方法是从vector<vector<int> >派生的东西,你应该添加一些关于调整大小的函数,因为如果你添加新行,矩阵向量不会自动添加列,它将是你所需要的。

class myMatrix:public vector<vector<int> >
{
...
bool resize(int x, int y)
{
   resize(x);
   for(vector<vector<int> >::iterator iter = begin(); iter !=end(); ++iter)
   (*iter).resize(y);
}
}
相关文章: