Ошибка подтверждения в std: vector, используемая в std :: set_difference - PullRequest
0 голосов
/ 24 февраля 2009

Я пытаюсь найти разность множеств двух векторов, поэтому я делаю что-то вроде этого:

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. Любые идеи о том, что может вызвать это?

1 Ответ

7 голосов
/ 24 февраля 2009

Как и большинство алгоритмов 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);
...