Мне нужно вызвать функцию set_union в STL следующим образом:
set<int> a1, a2; set_union(a1.begin(), a1.end(), a2.begin(), a2.end(), inserter(a1, a1.begin());
а не
set_union(a1.begin(), a1.end(), a2.begin(), a2.end(), a1.begin());
почему это так?
a1.begin () просто не является выходным итератором. insertter (a1, a1.begin ()) возвращает выходной итератор, который будет вызывать функцию вставки набора для каждого элемента. Но я даже не уверен, верна ли первая версия. Вы перебираете тот же набор, в который вставляете новые элементы. (!)
Поскольку вы уже имеете дело с объектами set <>, почему бы вам просто не написать
a1.insert(a2.begin(),a2.end());