這聽起來很危險,但我試圖做這樣的事情:「安全」的方式將元素添加到超出其大小(一個std ::向量),但根據其能力()
std::vector<StructureSlowToBeCreated> vElems;
StructureSlowToBeCreated s1, s2;
vElems.reserve(many_slots_for_structs);
vElems[x1] = s1; // I can ensure x1, x2 < many_slots_for_structs
vElems[x2] = s2;
基本上,這個想法是避免使用
vElems.resize(many_slots_for_structs);
由於兩個S1和S2是緩慢的創造,所以我不想做兩次。正如我所說的,我可以100%保證X1和X2將是矢量內能力邊界,還多次肯定之外大小邊界(ERGO,使用「在()」最終會成爲例外)。
有沒有更乾淨的方法來做到這一點?或者我應該認爲這個清潔夠了(我感覺它不是)。
我真的需要把S1在X1指數,否則,我需要存儲X1爲S1參數和存儲二次地圖的鏈接X1s1在向量中的位置(並且我會增加在每次訪問時查看地圖的成本s1或s2,這是我不惜一切代價避免的)。
非常感謝您的幫助。
我想有很多關於如何使用向量的例子和參考。是的,有一個更清潔的方式,因爲你的方式是一個錯誤。 – juanchopanza
如何使用'reserve'和'push_back'或'emplace_back'? – Galik
要麼使用'emplace_back',以避免無意義的構造,修復你的類,以免構造起來太慢,或者使用'std :: vector>'(或'boost :: optional')來延遲構建實際的元素。 –
GManNickG