2012-10-16 31 views
2

當我嘗試執行以下操作時,我有一個11663 Bus Error;多維向量總線錯誤

std::vector< std::vector<int> > bullets; 
std::vector<int> num; 
num[0] = 7; 
bullets.push_back(num); 

我認爲這將作爲矢量bullets的類型是一個向量。爲什麼不按預期工作?另外,下面的工作;

std::vector< std::vector<int> > bullets; 
std::vector<int> num (4, 100); 
bullets.push_back(num); 

而我不知道爲什麼這個工程,但不是我的其他代碼。

+0

我還不能肯定,但我認爲,人們覺得你的載體是空的... –

+2

@ AK4749是積極的。你完全正確。 = P – WhozCraig

+0

@WhozCraig哈哈我不知道,在這裏有所有關於.push_back()的強烈情緒,我想我會通過一些仔細的探索來鍛鍊心情 –

回答

3
std::vector<int> num; 
num[0] = 7; 

num尚未分配任何存儲空間。如果您知道該索引處存在元素,請僅使用索引編制語法[]。否則,使用push_back,如果需要增加vector的存儲容量。第二個例子的工作原理是因爲您使用了爲元素保留一定空間的構造函數(在這種情況下爲4,所有值均爲100)。

std::vector<int> num; 
num.push_back(7); 
bullets.push_back(num); 

在一個側面說明,「這行不通」是不是一個非常有用的問題說明。此外,請注意,如果您需要遍歷每個元素,那麼在性能關鍵代碼中,用作矩陣的向量矢量並不是一個好主意。

不要廢了,只是還沒有,不要擔心緊靠它,除非你知道一個事實,這將是一個問題,但要意識到你丟失數據的地方使用這種方法,因爲每個向量將其分配分開存放。如果這個數據在一個緊密的循環中迭代,你最好分配一個大的矢量,並手動計算每個位置的偏移量。

+1

+1:除非OP有一些奇怪的矩陣, - 大小可以改變矩陣間,Ed對於將N * M矩陣分配給單個N * M元素矢量<>的評估是完全正確的。 – WhozCraig

+0

@WhozCraig:是的,對不同的行大小有很好的要求。 –

+0

我還在搞亂有多少元素需要在我的矢量中,但我會嘗試使用偏移量:)謝謝! –

0
num[0] = 7; 

應該

num.push_back(7);