Разрешено ли повторное использование векторов в set_intersection?

Я немного озадачен, вот что я сделал

  1. Первый вектор назван vec имеет 5 элементов
  2. Второй вектор назван s имеет 3 элемента.
  3. Два элемента являются общими для них
  4. Сделал союз из них, получил правильный вывод. Результат был сохранен в vec_out

Проблема начинается —
5. Сделал их пересечение и сохранил в vec_out, не дает результата, то есть ничего не пересекается
6. Изменен результат для записи в новый вектор v, показывает правильный результат, т.е. пересекаются 2 элемента

Итак, я хотел бы знать, почему не повторное использование vec_out работать для выяснения set_intersection (это 5-й аргумент для set_intersection)?

Есть намеки?
Вот код

vector<int> vec(5);
vector<int> s(3);
vector<int> vec_out(10);
vector<int>::iterator itr;

vec[0]=3;
vec[1]=4;
vec[2]=4;
vec[3]=14;
vec[4]=42;s[0]=14;
s[1]=42;
s[2]=442;

set_union(vec.begin(), vec.end(), s.begin(), s.end(), vec_out.begin());
cout<<"union\n";
for(itr = vec_out.begin(); itr != vec_out.end(); itr++)
cout << " " << *itr;
cout<<endl;

std::vector<int> v(10); // Using a new vector works fine, and gives result
// THIS BELOW LINE IS NOT WORKING
//itr=set_intersection(vec.begin(), vec.end(), s.begin(), s.end(), vec_out.begin());
itr=set_intersection(vec.begin(), vec.end(), s.begin(), s.end(), v.begin());
v.resize(itr - v.begin());

cout<<"intersection\n";
for(itr = v.begin(); itr != v.end(); itr++)
cout << " " << *itr;

К вашему сведению: я правильно выполняю итерацию по ожидаемому вектору, никаких проблем с отображением, т. Е. Я выполнял итерацию по vec_out, когда пытался выполнить шаг 5.

0

Решение

Может быть, это потому, что вы забыли заменить v на vec_out в конце вашего кода. Этот код работает правильно (14 42):

std::vector<int> v(10); // Using a new vector works fine, and gives result
// THIS BELOW LINE IS NOT WORKING
itr=set_intersection(vec.begin(), vec.end(), s.begin(), s.end(), vec_out.begin()>);
/* itr=set_intersection(vec.begin(), vec.end(), s.begin(), s.end(), v.begin()); >*/
vec_out.resize(itr - vec_out.begin());

cout<<"intersection\n";
for(itr = vec_out.begin(); itr != vec_out.end(); itr++)
cout << " " << *itr;
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]