我们正在尝试使用2D矢量,因为我们需要一个可以动态增长的2D数组。
我们试过这个: 在类声明中:
vector<vector<double> > table;
但是似乎没有分配表格。当我们尝试访问成员时,我们会遇到段错误。
然后我们尝试了这个:
班级宣言:
vector<vector<double> >* table;
构造
table = new vector<vector<double> >;
但是现在我们之前访问它的方式(使用[] [])不起作用。
我们尝试了一个虚拟课:
class myClass {
public:
myClass();
~myClass();
vector<vector<double> > t;
};
myClass::myClass()
{
t = vector<vector<double> > (10, vector<double>(10));
}
但它不能正常免费,我们得到了核心转储。此外,当我们尝试增长数组时,我们将展开构建每个新行。
例如:
t[50] = vector<double>(5);
t[50][10] = 10;
如果我们不这样做,我们会得到一个段错误
答案 0 :(得分:5)
在访问元素之前,您需要调整表的大小。
vector<vector<double> > table;
table.resize(10);
for (int i = 0; i < 10; ++i)
table[i].resize(20);
答案 1 :(得分:3)
确保您的矢量足够大以存储您的元素。如果向量t
的大小为N
,则您可以访问的最后一个元素为t[N-1]
。
t = vector<vector<double> > (10, vector<double>(10));
t[50] = vector<double>(5); // This is wrong! Vector size is 10, you access 50th.
t[50][10] = 10; // Wrong again! Vector size 5, you access 10th.
答案 2 :(得分:2)
如果您安装了Boost,请尝试使用Boost Multi-array。
答案 3 :(得分:0)
您可以通过取消引用以[] []方式访问元素。
Vector<vector<double>> *table ;
table = new vector<vector<double>> ( n, vector<double>( m, 0.0)) ;
cout << (*table)[i][j] ;
在大多数情况下,这种方法效果很好。