我已經讓我的腦袋圍繞着C++幾個月,並且有 被谷歌指令堆棧溢出,大部分時間爲 用於C++查詢。我注意到經常對 「爲什麼不使用矢量」這一類型的說明,並且受到啓發就是爲了做到這一點。不像陣列的C++向量
所以,主要是爲了獲得自動內存釋放, 的小優點,並且能夠編寫用於排序的類型比較函數。 我將一個指向數組的指針切換爲一個矢量。 現在我覺得(不正確地似乎),其載體可以或多或少是陣列中使用 ,因此我初始化正是如此:
cluster clusters[LOTS];
vector<cluster *> pclust;
pclust.reserve(numClust);
for (int i=0; i<numClust; ++i)
pclust[i] = clusters + i;
從編譯器沒有抱怨。 然後一段時間後,我需要對集羣對象的某些 屬性上的向量進行排序。所以:
std::sort(pclust.begin(), pclust.end(), ClusterCompareNumSegs);
再次沒有問題編譯。除矢量不 得到排序。事實證明,vector.size()爲零, ,當然還有我的初始化應該已經
pclust.push_back(clusters + i);
現在,這是很容易解決,但我很困惑,因爲最初 不正確的分配是工作。我通過 成功迭代向量 - 使用數組語法,就像這樣:
for (clustind=0; clustind < numClust; ++clustind) {<br>
cluster *cl = pclust[clustind];
...happily access *cl...
而這一切都工作得很好。所以我只是想知道發生了什麼。 大概在我最初的任務中,我試圖訪問尚未在向量中的元素(我試圖將它們放入), ,並且向量拋出了我忽略的異常。 但是,當參考位置時,指針 在那裏。任何人都可以提供啓發嗎?
標準庫是相當廣闊的,並沒有什麼特別歡迎對初學者,我建議你至少在容器類型(http://en.cppreference.com/w/cpp)閱讀文檔 - 它會爲你節省很多痛苦。 – cmannett85
只是爲了重申一下,我的代碼現在都是固定的,但我只是想知道 – bandjalong
..如果任何人都可以解釋,而運算符[]工作得很好,即使沒有改變大小。編譯器(gcc)實現矢量也許幸運嗎? – bandjalong