std::vector<int> vi;
std::generate_n(std::back_inserter(vi),10,rand);
std::vector<int> vi_1;
vi_1.reserve(vi.size());
std::copy_if(vi.begin(),vi.end(),vi_1.begin(),std::bind2nd(std::greater<int>(),-20000));
//Here (in copy_if) I'm getting assert error.
回答
儲備實際上並沒有創建對象,它只是保證說,每當那將向量增長到給定限制通話將是O(1)。使用resize
。
您還可以使用儲備和std :: back_inserter(vi_1) –
如果覺得我寧願保持'reserve'並使用'back_inserter',以避免產生無用的值。 –
'push_back'有保證的O(1),即使沒有'reserve(n)'。 'reserve'保證不會重新分配,直到vector變得大於'n'。這有兩個重要的影響:O(1)中的常數因子確實是常數(不僅是一個攤銷常數),而且非常小;並且沒有迭代器,對已經存在的元素的引用或指針將失效 –
vi_1.reserve
僅僅保留的內存,但不改變載體的實際大小。爲此,您必須使用resize
。
確實,我做了,更正了。 –
- 1. 斷言錯誤
- 2. vector push_back導致斷言錯誤,但列表push_back工作
- 3. SIFT斷言失敗錯誤
- 4. OpenCV flann.h斷言錯誤
- 5. _int_malloc斷言錯誤
- 6. 錯誤 - mremap_chunk:斷言
- 7. SAML斷言錯誤
- 8. 斷言錯誤 - Pyalgotrade
- 9. 的Xerces-C斷言錯誤
- 10. MongoDB的斷言錯誤
- 11. 的MongoDB:斷言15934錯誤
- 12. C++錯誤:調試斷言失敗
- 13. OpenCV的findHomography斷言失敗的錯誤
- 14. 獲取錯誤「調試斷言失敗」
- 15. 斷言錯誤:_BLOCK_TYPE_IS_VALID(pHead-> nBlockUse)
- 16. FlannBased匹配器斷言失敗錯誤
- 17. Xcode 4斷言錯誤
- 18. python斷言錯誤nltk.ConditionalFreqDistribution
- 19. pandas斷言空列錯誤
- 20. 斷言故障錯誤
- 21. 斷言錯誤問題
- 22. 斷言錯誤輪詢
- 23. 調試斷言錯誤
- 24. 斷言方法錯誤
- 25. 調試斷言錯誤viewrich.cpp
- 26. 何處放錯誤/斷言?
- 27. 錯誤:iisexpress.exe - 斷言失敗
- 28. 斷言CUTE創建錯誤
- 29. 斷言錯誤在蟒蛇
- 30. 斷言與回報錯誤?
錯誤消息說什麼? – blubb
你確定你需要'vi_1.reserve(vi.size());'而不是'vi_1.resize(vi.size());'? – dasblinkenlight