使用std :: copy_if为std :: vector时出现断言错误

时间:2012-01-25 09:21:41

标签: c++ algorithm iterator assertions

为什么我在尝试时遇到运行时错误:

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.

2 个答案:

答案 0 :(得分:2)

Reserve实际上并不创建对象,它只保证每个将向量增长到给定限制的调用都将是O(1)。使用resize

答案 1 :(得分:1)

vi_1.reserve仅保留内存,但不会更改向量的实际大小。为此,您必须使用resize