我想用數據填充的(在運行時已知的)量的向量,但元件在(索引,值)對到來,而不是原始的向量訂購。這些指數都保證是唯一的(每個指數從0到n-1的出現恰好一次),所以我想將其保存爲:灌裝在C++外的順序數據
vector<Foo> myVector;
myVector.reserve(n); //total size of data is known
myVector[i_0] = v_0; //data v_0 goes at index i_0 (not necessarily 0)
...
myVector[i_n_minus_1] = v_n_minus_1;
這似乎很好地工作在大多數情況;在代碼的最後,所有n個元素都位於向量中的適當位置。然而,一些向量函數不能如願不太工作:
...
cout << myVector.size(); //prints 0, not n!
這對我很重要,像size()
功能仍能正常工作 - 我可能要檢查,例如,如果所有的元素實際上是插入成功通過檢查是否size() == n
。我是否初始化矢量是錯誤的,如果是的話,我應該如何處理這個問題呢?
這是因爲保留不調整矢量大小。你想使用'vector.resize'而不是 – Anycorn
'Foo'默認構造?到目前爲止,三種解決方案都假定它是。否則,可能需要存儲輸入值,然後一次構建所有的Foo。 – MSalters