我在互聯網上讀到,如果您重複清除std::vector
(處於緊密環路中),最好使用resize(0)
而不是clear()
,因爲它可能更快。我不確定這一點。有沒有人對此有明確的答案?矢量清除與調整大小
回答
我假定你的意思resize(0)
而不是setsize
,並調用的,與其clear()
,那你在談論std::vector
。 IIRC最近的回答討論了這個問題(無法找到鏈接),並且在現代STL實現中,clear()
很可能與resize(0)
相同。
以前清除矢量可能釋放了所有內存(即其容量也降爲零),導致在重新添加元素時重新分配,與保留容量的resize(0)
不同,因此重新分配的次數較少。但是,我認爲在現代STL庫中沒有區別。如果你使用舊的STL實現,或者你只是偏執狂,resize(0)
可能會更快。
或使用MFC,它的數組(即矢量)類有一個setsize,其有效地調整大小 – 2010-04-29 16:29:15
我不知道MFC的容器,OP說矢量,所以我認爲他們的意思是'std :: vector
這個聲音實現特定,是你,你的圖書館和一個分析器的工作。但正如我所看到的,我不明白爲什麼resize(0)應該更快,因爲兩者實際上都必須調用erase(begin(),end())。
看着Dinkumware的STL源,既有效地調用erase(begin(), end());
clear()
會更有效,毫不奇怪,因爲它只是一個案件來處理。但我不希望它是可衡量的。
當vector包含一個沒有默認構造函數的類的對象時,clear和resize(0)之間似乎有區別。例如,下面的代碼將編譯:
#include <vector>
class A {
private:
int x,y;
public:
A(int x,int y) :x(x), y(y) {}
};
int main() {
std::vector <A> aa;
aa.clear();
}
但是,如果你代替aa.clear()
通過aa.resize(0)
,你會得到編譯錯誤:
error: no matching function for call to 'A::A()'
我想這是因爲調整大小需要默認構造函數,所以如果您調整大小到大於當前大小,它可以默認構造新元素。 – 2017-10-30 12:54:22
- 1. 清除和調整大小的矢量 - C++
- 2. 調整大小後的矢量容量
- 3. 調整大小嵌套的std ::矢量
- 4. 靜態矢量調整大小
- 5. for_each綁定矢量調整大小
- 6. STL矢量:調整大小()和分配()
- 7. 矢量調整大小()自動填充
- 8. STL的矢量調整大小
- 9. 矢量與大小初始化,無法清除
- 10. 動態調整大小並在C++中填充矢量矢量
- 11. c# - 調整大小時清除表面
- 12. 哪一個更快使用擦除或調整矢量大小?
- 13. 與調整大小
- 14. 矢量調整大小VS儲備嵌套向量
- 15. CSS調整大小與% - 偏移量
- 16. 在調整了矢量大小之後,爲什麼我不能增加矢量
- 17. 調整外部矢量的大小是否會複製內部矢量?
- 18. Java矢量大小()
- 19. 擦除一個或多個元素後,矢量數組是否調整大小?
- 20. NSImageView調整大小與圖像大小
- 21. 矢量調整大小 - 便攜式檢測方式
- 22. 不使用迭代器已調整大小的矢量
- 23. 如何調整結構或類成員的矢量大小?
- 24. Java矢量調整大小可能會有問題,如在C + +?
- 25. 如何調整矢量大小(只有行)
- 26. 節省時間的標準::矢量::調整大小
- 27. 如何調整Eigen3中的矢量大小
- 28. 使用重新採樣調整矢量的大小
- 29. 調整大小矢量編譯器錯誤
- 30. 矢量調整大小/分配不添加默認值
你可以嘗試這兩種方法,並告訴我們如何去? – 2010-04-29 16:23:04
假設你的意思是'resize(0)'? – Roddy 2010-04-29 16:34:55