2015-09-09 67 views
0

我有一些東西,我似乎無法再弄清楚我自己。我不知道如何稱呼這個問題。指向陣列的指針持有兩個矢量

vector<int> *integerVectors[2] = { new vector<int>, new vector<int>}; 
(*integerVectors)[0].push_back(1); 
(*integerVectors)[1].push_back(1); 

當我運行這個我得到一個未處理的exeption。我想要的是一個有2個索引的數組,每個數組都有一個向量。

編輯:當我開始推回時,問題似乎出現。

+4

不這樣做。使用'矢量 integerVectors [2]; integerVectors [0] .push_back(1);'簡單,是嗎? –

回答

3

此語法。:

MyType *var[size]; 

創建指針數組大小sizeMyType,這意味着,這樣的:

vector<int> *integerVectors[2]; 

產生大小2陣列指針整數矢量的,它是由你的能力備份的事實初始化integerVectors,其初始化指針列表指向由new調用產生的整數向量。

這樣的:

(*integerVectors) 

產生一個指向你的第一個向量的指針。然後你可以調用operator [],它將向量偏移指針的大小。但是這不再是指向數組的指針 - 如果用大於0的參數調用它,則會引用第一個向量元素指向的虛擬向量旁邊的虛構向量。

然後您在假想向量上調用push_back,在運行時自然會導致大量問題。

要麼你想取消引用前偏移,如@的

integerVectors[i]->push_back(1); 

抽象的建議,或者你想避免C風格的數組。你已經在使用一個載體,並嵌套他們,而不是讓他們的陣列將避免這種類型的在未來的很多混亂,同時保持正確的語法:

vector<vector<int>*> integerVectors = {new vector<int>, new vector<int>}; 
integerVectors[1]->push_back(1); 

沒有C數組,你需要語法非常清晰。

更妙的是,你可能只是避免指針乾脆使用

vector<vector<int>> integerVectors = {vector<int>{}, vector<int>{}}; 
integerVectors[1].push_back(1); 

,其中有幾個等效語法的第一行,如所指出的@NeilKirk:

vector<vector<int>> integerVectors(2); 
vector<vector<int>> integerVectors{{},{}}; 
vector<vector<int>> integerVectors(2, vector<int>{}); 
vector<vector<int>> integerVectors(2, {}); 

的捲曲我在初始化時使用的大括號是另一種初始化對象的方法,沒有編譯器將它混淆爲最令人頭痛的解析中的函數的可能性。 (但是,對於可以使用這裏的初始化列表進行初始化的東西,你必須小心謹慎,這就是爲什麼一些初始化使用括號)第一個語法默認 - 初始化兩個向量,第二個初始化也是如此它明確表示同樣的事情。它也可以被修改以產生更復雜的結構:兩個具有{1,2,3}元素的矢量可以是以下之一:

vector<vector<int>> integerVectors = {{1,2,3},{1,2,3}}; 
vector<vector<int>> integerVectors{{1,2,3},{1,2,3}}; 
vector<vector<int>> integerVectors(2, vector<int>{1,2,3}); 
vector<vector<int>> integerVectors(2, {1,2,3}); 
+0

你最後的代碼需要修復。 –

+0

最終的無指針示例具有錯誤類型的初始化。你想'矢量> integerVectors {2}'得到兩個默認構造的向量。 –

+0

@NeilKirk固定。謝謝。唉,因爲我被複制粘貼出賣了!/s – jaggedSpire

2

這條線是問題

(*integerVectors)[1].push_back(1); 

解引用*integerVectors給你第一向量指針(的integerVectors[0]當量。然後調用你對這個指針,這將給參考矢量調用operator []與1如arguent與地址移位與一個矢量大小向前(相當於*(integerVectors[0]+1)),這是無效的 正確的語法是

​​
+0

你是對的我很抱歉,我忘了它是指針數組。我糾正了答案。 – Abstraction