2009-02-24 46 views
0

我想找到兩個向量的差集使用的載體,所以我做這樣的事情:斷言錯誤:在性病:: set_difference

std::vector<sha1_hash> first_vec, second_vec, difference_vec; 

// populate first_vec and second_vec ... 

std::sort(first_vec.begin(),first_vec.end()); 
std::sort(second_vec.begin(),second_vec.end()); 

std::set_difference(first_vec.begin(),first_vec.end(), 
      second_vec.begin(),second_vec.end(), 
      difference_vec.begin()); 

,當我在調試運行它,我得到以下運行時斷言失敗(在「矢量」):

_SCL_SECURE_VALIDATE_RANGE(_Myptr < ((_Myvec *)(this->_Getmycont()))->_Mylast); 

我使用VS 2008 任何想法什麼可以觸發這個?

回答

7

與大多數C++算法一樣,set_difference不會在輸出向量中創建以前沒有的新條目。你需要在輸出中創建空間來保存結果。

編輯:或使用一個插入迭代器(以下未經測試):

back_insert_iterator< std::vector<sha1_hash> > bi(difference_vec); 

std::set_difference(first_vec.begin(),first_vec.end(), 
      second_vec.begin(),second_vec.end(), 
      bi); 
+1

那麼詳細使用back_insert_iterator的: 的std :: set_difference(first_vec.begin(),first_vec.end(),second_vec。 begin(),second_vec.end(),std :: back_inserter(difference_vec)); – 2009-02-24 16:30:29