此語法。:
MyType *var[size];
創建指針數組大小size
的MyType
,這意味着,這樣的:
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});
不這樣做。使用'矢量 integerVectors [2]; integerVectors [0] .push_back(1);'簡單,是嗎? –