2011-03-11 57 views
4

我们试图使用2D向量,因为我们需要一个将动态增长的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)); 
} 

但它不是免费的正确,我们得到了核心转储。另外,当我们试图增长数组时,我们会用expclitly构造每一个新行。

例:

t[50] = vector<double>(5); 
t[50][10] = 10; 

如果我们没有像这样做,我们会得到一个segfault

回答

4

你需要之前,你访问的元素调整表。

vector<vector<double> > table; 
table.resize(10); 
for (int i = 0; i < 10; ++i) 
    table[i].resize(20); 
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.