2009-02-24 1 views
0

Я пытаюсь найти разность множеств двух векторов, поэтому я сделать что-то вроде этого:ошибка Assertion в станде: вектор, используемый в станде :: 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 не создает новые записи в выходном векторе, где раньше не существовало. Вы должны создать пространство на выходе для хранения результатов.

Edit: Или использовать итератор вставки (после непроверенные):

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: зЬй :: set_difference (first_vec.begin(), first_vec.end(), second_vec. begin(), second_vec.end(), std :: back_inserter (difference_vec)); –