为什么我在尝试时遇到运行时错误:
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.
答案 0 :(得分:2)
Reserve实际上并不创建对象,它只保证每个将向量增长到给定限制的调用都将是O(1)。使用resize
。
答案 1 :(得分:1)
vi_1.reserve
仅保留内存,但不会更改向量的实际大小。为此,您必须使用resize
。