多维动态矩阵我怎样才能创建一个
multidimensional dynamic matrix how can i create one?
我在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);
}
}
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 试图在visual studio上用C++创建一个桌面应用程序
- 如何创建一个空的全局类并在启动时实例化它
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何创建一个QTableWidgetItem,用长文本右对齐,左边有省略号
- 我正在尝试使用 c++ 创建一个货币转换程序,我不知道如何继续
- visual是否可以在c++中创建一个接收无限数量相同类型(或至少相当数量)参数的函数
- 试图创建一个多线程程序来查找0-100000000之间的总素数
- 如何创建一个函数来计算并返回平均值、最大值和最小值
- 如何使用CLion在Mac上创建一个新的.txt文件
- 如何在没有数据拷贝的情况下从指针创建一个Eigen VectorXd对象
- 在c++中为double类型的数组创建一个unique_ptr
- 我可以创建一个包含两个变量的 for 循环,但时间复杂度仍然为 O(n) 吗?
- GLEW/GLUT:调用init并创建一个窗口后,取消初始化并重新初始化?
- 我想通过带有C++和Python的插件创建一个可扩展的应用程序
- 在 c++ 中,有一种方法可以创建一个包含地图作为值的树状地图?
- 模板化接口 - 创建一个泛型模板类以返回任何容器
- 创建一个包含 c++ 默认值的环境文件
- 如何创建一个类,以便向量工作 std::vector<MyClass<int>> v{ 1,2,3 };