C++中的维度动态数组
a dimensional dynamic Array in C++
我用 c++ 编码才 15 天,就遇到了一些卡住的地方。我需要使用动态二维数组来满足我的目的。我使用 std::vector 来创建一维动态数组,我不知道如何创建二维动态数组。如果有帮助,我正在使用 VC++,但我没有 VC++ 库函数。
有谁知道如何完成它?
你可以使用嵌套向量来做到这一点:
int number_of_rows, number_of_columns;
std::vector < std::vector <int> > array;
array.resize(number_of_rows);
for (int i=0; i < number_of_rows; ++i)
array[i].resize(number_of_columns);
array[1][2] = 3; // e.g. of assignment
在构造函数中初始化完整的数组大小:
std::vector <std::vector <int> > (nor, std::vector<int>(noc));
但请注意,嵌套std::vector
结构不会将您绑定到二维数组 - 每个嵌套向量可以具有不同的大小。 例如:
std::vector <std::vector <int> > not_array(3);
// contains 3 inner empty vectors
for (int i=0; i < 3; ++i)
arrray[i].resize(i+1);
现在,not_array
按该顺序包含大小为 1、2 和 3 的向量。
如果要确保使用的是矩阵 (2D),而不仅仅是 (1D) 向量的向量,则可以使用外部库中的实现。
-
OpenCV
是一个计算机视觉库,包含类cv::Mat
-
boost
是一个通用库,具有matrix
类的实现
如果您的数组尺寸可以是可变的(例如,每行可以有不同的长度),vector<vector<int> >
是一个很好的解决方案(将int
替换为您的特定元素类型)。
即使每行的长度相同,也可以使用此方法,但要确保此属性可能需要更多工作。 在后一种情况下,最好找到一个支持某些Matrix
类型的库。
C++/STL 标准库中没有二维数据结构。
正如其他人所说,您可以通过嵌套 STL 容器(如 vector
)来解决问题。但它不能保证整体结构的一致性。(矩阵的两行不能保证长度相同)。
您应该将其封装在对象中以强制实施正确的矩阵结构。或者你可以使用已经存在的矩阵数据结构,我相信有很多库提供它。
二维数组是向量的向量。请参阅示例。
// Declare size of two dimensional array and initialize.
vector< vector<int> > vI2Matrix(3, vector<int>(2,0));
vI2Matrix[0][0] = 0;
vI2Matrix[0][1] = 1;
vI2Matrix[1][0] = 10;
vI2Matrix[1][1] = 11;
vI2Matrix[2][0] = 20;
vI2Matrix[2][1] = 21;
cout << "Loop by index:" << endl;
int ii, jj;
for(ii=0; ii < 3; ii++)
{
for(jj=0; jj < 2; jj++)
{
cout << vI2Matrix[ii][jj] << endl;
}
}
如果你正在处理标量数组,你绝对应该考虑使用Eigen。
特征是线性代数的C++模板库:矩阵、向量、 数值求解器和相关算法。
它带有一个很棒的文档,提供了许多示例。
在 Eigen 上调整数组大小很简单:
#include <Eigen/Dense>
using namespace Eigen;
...
MatrixXd m(5,5); // 5x5 matrix of double
m.resize(10,5); // resizing to a 10x5 matrix
请注意,特征还可以扩展到自定义标量类型。
std::vector< std::vector<int> >
后
放大 std::vector 非常简单,但缩小有一些问题。请参阅参考文献。
当您减小大小时,您仅在逻辑上删除额外的元素(不能保证物理上减少内存)。要强制减少内存,您可以使用这样的技巧。
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 输出没有重复元素的动态数组(收缩数组)C++
- 正在插入动态数组
- 如何在动态数组上使用搜索函数
- C++ 动态数组每次添加时将大小增加 1 - 错误
- 静态数组的自由动态数组
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 使用 thread 类在 C++ 中构造线程的动态数组时出错
- 如何为 c++ 的不同变量类型的结构元素创建动态数组?
- C++ 使用存储在动态数组中的文本文件中的数据查找模式
- 当我使用自定义类型创建动态数组时,即使使用字符串,它似乎也不起作用
- 为什么 c++ 动态数组的大小没有改变?
- 具有自定义构造函数 (C++) 的类型的动态数组分配
- 指针的 C++ 动态数组 - 何时需要使用它?
- 删除动态数组时未定义标识符
- 哈希映射使用 nullptr c++ 初始化节点的动态数组
- 如何将字符串和整数读取到两个单独的动态数组中的程序编写?
- 动态数组的 C++ 重载加运算符
- 基于数组的列表 - 动态数组创建时出错