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