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

Popular posts from this blog

javascript - backbone.js Collection.add() doesn't `construct` (`initialize`) an object -

php - Get uncommon values from two or more arrays -

Adding duplicate array rows in Php -