#include <algorithm>
#include <vector>
#include <iterator>
#include <set>
#include <iostream>
#include <numeric>
using namespace std;
int main()
{
std::vector<int> L = { 1, 2, 4, 3, 2, 4 };
std::set<int> tempSet;
//...
// partition the elements, unique items on left, duplicates on right
auto divider = stable_partition(L.begin(), L.end(), [&](int n)
{
// return true if item is not in the set, false otherwise
return tempSet.insert(n).second;
});
// do something with the duplicates, for example, print them
cout << "Here are the dups:\n";
copy(divider, L.end(), ostream_iterator<int>(cout, " "));
// get the average
// get number of duplicates
size_t numDups = std::distance(divider, L.end());
double avg = 0.0;
// compute average using std::accumulate
if ( numDups > 0 )
avg = std::accumulate(divider, L.end(), 0.0) / numDups;
cout << "\nThe average of the duplicates is: " << avg << "\n";
// erase the duplicates
L.erase(divider, L.end());
// print the updated vector now
cout << "\n\nHere is the resulting vector:\n";
copy(L.begin(), L.end(), ostream_iterator<int>(cout, " "));
}
ICAgICNpbmNsdWRlIDxhbGdvcml0aG0+CiAgICAjaW5jbHVkZSA8dmVjdG9yPgogICAgI2luY2x1ZGUgPGl0ZXJhdG9yPgogICAgI2luY2x1ZGUgPHNldD4KICAgICNpbmNsdWRlIDxpb3N0cmVhbT4KICAgICNpbmNsdWRlIDxudW1lcmljPgogICAgCiAgICB1c2luZyBuYW1lc3BhY2Ugc3RkOwogICAgCiAgICBpbnQgbWFpbigpCiAgICB7CiAgICAgICAgc3RkOjp2ZWN0b3I8aW50PiBMID0geyAxLCAyLCA0LCAzLCAyLCA0IH07CiAgICAgICAgc3RkOjpzZXQ8aW50PiB0ZW1wU2V0OwogICAgICAgIC8vLi4uCiAgICAgICAgLy8gcGFydGl0aW9uIHRoZSBlbGVtZW50cywgdW5pcXVlIGl0ZW1zIG9uIGxlZnQsIGR1cGxpY2F0ZXMgb24gcmlnaHQKICAgICAgICBhdXRvIGRpdmlkZXIgPSBzdGFibGVfcGFydGl0aW9uKEwuYmVnaW4oKSwgTC5lbmQoKSwgWyZdKGludCBuKQogICAgICAgIHsKICAgICAgICAgICAgLy8gcmV0dXJuIHRydWUgaWYgaXRlbSBpcyBub3QgaW4gdGhlIHNldCwgZmFsc2Ugb3RoZXJ3aXNlCiAgICAgICAgICAgIHJldHVybiB0ZW1wU2V0Lmluc2VydChuKS5zZWNvbmQ7CiAgICAgICAgfSk7CiAgICAKICAgICAgICAvLyBkbyBzb21ldGhpbmcgd2l0aCB0aGUgZHVwbGljYXRlcywgZm9yIGV4YW1wbGUsIHByaW50IHRoZW0KICAgICAgICBjb3V0IDw8ICJIZXJlIGFyZSB0aGUgZHVwczpcbiI7CiAgICAgICAgY29weShkaXZpZGVyLCBMLmVuZCgpLCBvc3RyZWFtX2l0ZXJhdG9yPGludD4oY291dCwgIiAiKSk7CgogICAgICAgIC8vIGdldCB0aGUgYXZlcmFnZQoKICAgICAgICAvLyBnZXQgbnVtYmVyIG9mIGR1cGxpY2F0ZXMgIAogICAgICAgIHNpemVfdCBudW1EdXBzID0gc3RkOjpkaXN0YW5jZShkaXZpZGVyLCBMLmVuZCgpKTsgIAogICAgICAgIGRvdWJsZSBhdmcgPSAwLjA7CgogICAgICAgIC8vIGNvbXB1dGUgYXZlcmFnZSB1c2luZyBzdGQ6OmFjY3VtdWxhdGUKICAgICAgICBpZiAoIG51bUR1cHMgPiAwICkgCiAgICAgICAgICAgYXZnID0gc3RkOjphY2N1bXVsYXRlKGRpdmlkZXIsIEwuZW5kKCksIDAuMCkgLyBudW1EdXBzOwogICAgICAgIGNvdXQgPDwgIlxuVGhlIGF2ZXJhZ2Ugb2YgdGhlIGR1cGxpY2F0ZXMgaXM6ICIgPDwgYXZnIDw8ICJcbiI7CiAgICAKICAgICAgICAvLyBlcmFzZSB0aGUgZHVwbGljYXRlcwogICAgICAgIEwuZXJhc2UoZGl2aWRlciwgTC5lbmQoKSk7CiAgICAKICAgICAgICAvLyBwcmludCB0aGUgdXBkYXRlZCB2ZWN0b3Igbm93CiAgICAgICAgY291dCA8PCAiXG5cbkhlcmUgaXMgdGhlIHJlc3VsdGluZyB2ZWN0b3I6XG4iOwogICAgICAgIGNvcHkoTC5iZWdpbigpLCBMLmVuZCgpLCBvc3RyZWFtX2l0ZXJhdG9yPGludD4oY291dCwgIiAiKSk7CiAgICB9Cg==