我已經宣佈了一個向量對int和向量爲vector<pair<int,vector<int> > v(10)
。現在我想使用清除功能v[i].clear()
,並期望它將清除行v[i]
。但編譯器會引發錯誤。請幫助我正確使用clear()函數來清除此向量聲明中的特定行,或者向我建議另一種方法。如何清除()內部矢量的矢量類型<pair <int,vector>>?
-1
A
回答
0
如果你想消滅i行,那麼你要刪除:
v.erase(v.begin() + i);
在你的榜樣,這會減少矢量的大小,只剩下9個元素。另一方面,如果要重新初始化第i行,以便它包含與第一次創建向量時包含的10個元素相同的內容,那麼您希望:
v[i] = pair<int, vector<int> >();
- 或 -
v[i].first = 0;
v[i].second.clear();
0
您的外層std::vector
包含std::pair
s和clear
是std::vector
而非std::pair
的方法。它看起來像您可能意味着這樣的:
v[i].second.clear();
如果你想從載體刪除整個我個元素,那麼這是不是你問一個不同的問題。相反,你可以將其刪除這種方式:
v.erase(v.begin() + i);
如果你想完全復位我個元素,那麼你就應該默認構造這樣的值:
v[i] = pair<int, vector<int> >();
或像這樣:
v[i] = std::make_pair(0, std::vector<int>());
而且,請注意,調用clear
沒有了「保留」的空間裏,真正自由了矢量裏面,所以如果您的載體是重盟友大,你想真正擺脫所有的內存,那麼你需要分配一個空的(默認構造)向量。或者,你可以調用使用swap-與空成語:
v[i].second.swap(std::vector<int>());
相關問題
- 1. 如何對矢量<pair <int,pair <int,pair <string,pair <int , int >>>>>進行排序
- 2. 傳遞矢量<reference_wrapper <int>>到矢量<int>?
- 3. 推矢量<double>到矢量<矢量<double>>
- 4. 插入到地圖類型<INT,矢量<int>>
- 5. make_pair矢量<矢量<struct>>
- 6. 填充矢量<int> *
- 7. 只製作矢量中的外部矢量<vector<int>>修復
- 8. 對矢量而不是矢量<pair>?
- 9. C++:矢量<對<vector<int>,INT>>
- 10. 如何填充矢量<矢量<Foo*>>?
- 11. 如何將矢量<string>轉換爲矢量<char*>
- 12. 如何轉換矢量<矢量<string>>爲char **
- 13. 奇怪:矢量<int> int彗星
- 14. 矢量<struct>
- 15. 如何插入載體vpii <矢量<對<int,int>>>
- 16. 安全地將矢量<int>分配給矢量<double>?
- 17. 矢量<int> :: C++中的size_type
- 18. 比較器,用於矢量<對<int,int>>
- 19. 使用find與矢量<對<int, int>>
- 20. 將OpenCV 2矢量<Point2i>轉換爲矢量<Point2f>
- 21. 將矢量<derived> :: iterator轉換爲矢量<base> :: iterator
- 22. 函數參數:矢量<Clazz*>&VS矢量<Clazz>&
- 23. 將矢量<unsigned char>轉換爲矢量<unsigned short>
- 24. 從矢量<string>轉換爲矢量<char*>至char **
- 25. 迭代矢量<矢量<Point>>
- 26. 從矢量<IplImage*>轉換爲矢量<Mat>
- 27. 有矢量<object>;返回矢量<object.member>不復制
- 28. 矢量<int>輸入和輸出
- 29. ARMA :: rowvec從性病::矢量<int>
- 30. Math.Net set矢量<int>大小
...是的,這就是我真正想要的......但我不知道'v [i] .second.clear()'會做同樣的事情..糾正我,如果我錯了:/ – Roshan 2014-10-09 23:27:43
'vector :: erase '需要一個迭代器而不是索引,所以這段代碼不起作用。 – b4hand 2014-10-09 23:28:28
它幾乎做同樣的事情; v [i] .second.clear()不會清除v [i] .first。 – jorgbrown 2014-10-09 23:29:24