在课堂上声明动态2D矢量

时间:2011-03-11 23:51:40

标签: c++ stl vector

我们正在尝试使用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;

如果我们不这样做,我们会得到一个段错误

4 个答案:

答案 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] ;

在大多数情况下,这种方法效果很好。