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. OpenCV flann.h断言错误
- 3. _int_malloc断言错误
- 4. 错误 - mremap_chunk:断言
- 5. SAML断言错误
- 6. 断言错误 - Pyalgotrade
- 7. MongoDB的断言错误
- 8. 的Xerces-C断言错误
- 9. 断言错误:_BLOCK_TYPE_IS_VALID(pHead-> nBlockUse)
- 10. FlannBased匹配器断言失败错误
- 11. Xcode 4断言错误
- 12. pandas断言空列错误
- 13. 多个错误断言宏
- 14. 调试断言错误
- 15. 断言方法错误
- 16. 何处放错误/断言?
- 17. 断言错误在蟒蛇
- 18. 断言与回报错误?
- 19. 断言错误:在性病:: set_difference
- 20. OpenCV的断言错误的拼接
- 21. matplotlib的tight_layout中的断言错误()
- 22. 断言两个哈希映射失败,断言错误
- 23. 获得OpenCV的错误:断言失败
- 24. C语言中断的逻辑错误
- 25. 使用ava的断言错误
- 26. 来自数据库的断言错误
- 27. 断言是错误的,证明与cout
- 28. Django的查看测试断言错误
- 29. 断言错误改装的Android
- 30. OpenCV错误:iOS上的断言失败
错误消息说什么? – blubb
你确定你需要'vi_1.reserve(vi.size());'而不是'vi_1.resize(vi.size());'? – dasblinkenlight