2011-03-11 60 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.