Это не работает, потому что c
это пусто . Это означает, что c.begin()
будет равно c.end()
, а разыменование конечного итератора приводит к undefined поведению .
Вам необходимо вставить элементы в вектор, например, используя std::back_inserter
:
auto ls = set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(c));
Однако с этим есть одна проблема: итератор, который возвращает set_intersection
, является концом итератора back_inserter
, который вы передали в set_intersection
функция. Этот итератор не имеет отношения к c.begin()
, что означает, что вы действительно не можете сделать ls - c.begin()
.
К сожалению, на самом деле нет способа определить расстояние между начальным back_inserter(c)
итератором и ls
.