Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多维动态矩阵如何创建? 我在Ubuntu中用C++工作。我想知道如何创建具有动态长度的矩阵_C++ - Fatal编程技术网

多维动态矩阵如何创建? 我在Ubuntu中用C++工作。我想知道如何创建具有动态长度的矩阵

多维动态矩阵如何创建? 我在Ubuntu中用C++工作。我想知道如何创建具有动态长度的矩阵,c++,C++,我这样做了:intmatrix[12][但它不起作用。在我的代码中,列的维度将逐步增加。有人能在一个例子中给我看一下正确的代码吗?你可以使用它。我可以使用vector typedef std::vector< std::vector<int> > Matrix; Matrix matrix; matrix.resize(12); // 12 rows. // Add one more coulmn for ( Matrix::iterator iter = matrix.

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

你可以使用它。

我可以使用
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);
typedef std::vectorMatrix;
矩阵;
矩阵。调整大小(12);//12排。
//再加一个coulmn
对于(矩阵::迭代器iter=Matrix.begin();iter!=Matrix.end();++iter)
(*国际热核实验堆)。推回(新的列值);
int**matrix;
矩阵=新整数*[rowcount];

对于(int i=0;i创建动态更改其大小的矩阵的最简单方法是从
vector
派生的一些函数,您应该添加一些关于调整大小的函数,因为如果您向矩阵添加新行,那么矩阵向量将不会自动添加列,这将是您所需要的

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);
}
}
类myMatrix:公共向量
{
...
bool resize(整数x,整数y)
{
调整大小(x);
对于(向量::迭代器iter=begin();iter!=end();++iter)
(*iter)。调整大小(y);
}
}

您可能想看看
boost ublas
库。它是一个数字库——您所期望的操作,如矩阵乘法,也是如此——但c++-std类似于通过模板接受任意类型(如
std::vector

您可以找到矩阵类型的文档

优点:

  • 它为您管理内存
  • 它的效率
  • 它已经有许多算法供您使用(如果您使用
    向量
    矩阵,则必须重新编写这些算法)
缺点:

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

如果在程序运行过程中列数发生变化,但行数没有变化(我就是这样理解您的问题的),则应将矩阵表示为。这意味着,第一个索引应表示列,第二个索引应表示行。然后,将矩阵表示为
std::vector
。现在,如果要添加列,只需添加另一个向量。如果存储矩阵行,则必须调整所有列的大小添加一个额外的列


如果仍要使用索引行主项(因为这是惯例),您可以将矩阵包装在一个类中以切换索引。

您能给我一个例子吗?
向量矩阵;
-这将首先创建一个一维向量,然后创建这个一维向量的另一个向量,因此,总的来说,这将作为一个动态二维矩阵,请接受您前面问题的解决方案。列的维度umns将在我的代码中逐步增加-这是否意味着您将获得额外的列或额外的行?您想要一个2D数组,还是想要一个支持矩阵运算的矩阵?+1因为
boost::ublas
非常有用,但我感觉OP想要大小动态变化的矩阵。哦,是的,我错过了这一部分STON-1:从不从STL类派生。STL类通常没有虚拟析构函数,并且有特殊的内存管理(分配器)。这里没有额外的内存分配,所有数据操作都是由类的标准函数完成的,所以这里没有坏处。就像说“不要使用C++,它可能泄漏内存”。C++明确区分了用作基类的类(例如,它们具有虚拟Dor、纯虚拟成员函数、受保护成员等)和不作为基类的具体类。这些包括STL容器和STD::String。
for(int i = 0; i < rowcount; ++i)
    delete [] matrix[i];
delete [] matrix;
vector<vector<int> > matrix(rowcount, vector<int>(colcount));
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);
}
}