c++ - STL set_symmetric_difference usage -
i solving programming problem, wants find symmetric difference between 2 sets. have solved using stl's set_symmetric_difference
. given 2 vector<int>s
, a
, b
:
a = {342,654,897,312,76,23,78}
b = {21,43,87,98,23,756,897,234,645,876,123}
sould return (correct answer):
{ 21,43,76,78,87,98,123,234,312,342,645,654,756,876 }
but get:
{ 21,43,76,78,87,98,123,234,312,342,645,65,756,876}
what problem ? here code:
sort(a.begin(), a.end()); sort(b.begin(), b.end()); // allocate smallest size of a,b maximum size vector<int> c(a.size() < b.size() ? b.size() : a.size()); vector<int>::iterator i; = set_symmetric_difference(a.begin(), a.end(), b.begin(), b.end(), c.begin()); return vector<int>(c.begin(), i);
note: correct answers rest of examples. example gives me wrong answer.
i have tested in visual studio, , got error message: "iterator not incrementable"
the problem in initialization of vector c
. logic wrong in maximum size of output range could large sum of 2 input ranges. since don't know size priori, better off starting empty output vector, , using push_back std::back_inserter instead:
sort(a.begin(), a.end()); sort(b.begin(), b.end()); std::vector<int> c; set_symmetric_difference(a.begin(), a.end(), b.begin(), b.end(), std::back_inserter(c)); return c;
this produces
21 43 76 78 87 98 123 234 312 342 645 654 756 876
Comments
Post a Comment