2012-01-25 82 views
1

断言错误:: vector的

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

错误消息说什么? – blubb

+1

你确定你需要'vi_1.reserve(vi.size());'而不是'vi_1.resize(vi.size());'? – dasblinkenlight

回答

2

储备实际上并没有创建对象,它只是保证说,每当那将向量增长到给定限制通话将是O(1)。使用resize

+1

您还可以使用储备和std :: back_inserter(vi_1) –

+2

如果觉得我宁愿保持'reserve'并使用'back_inserter',以避免产生无用的值。 –

+0

'push_back'有保证的O(1),即使没有'reserve(n)'。 'reserve'保证不会重新分配,直到vector变得大于'n'。这有两个重要的影响:O(1)中的常数因子确实是常数(不仅是一个摊销常数),而且非常小;并且没有迭代器,对已经存在的元素的引用或指针将失效 –

1

vi_1.reserve仅仅保留的内存,但不改变载体的实际大小。为此,您必须使用resize

+0

确实,我做了,更正了。 –