partition got a itr point to the begin of back partition, but it is not incrementable.
partition_copy allows pass in two containers through back/front_insert so can increment.
Note that vector is random iter but cannot use front_insert, why?
Note Stable Partition keep tag1 partition "Stabilize" and then partition by tag2 the back container
#include "stdafx.h"
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <functional>
#include <iterator>
#include <list>
using namespace std;
enum attrib
{
a0,a1, a2, a3, a4, a5, a6, a7, a8, a9,
tag1 = a4,
tag2 = a7
};
struct Entity
{
attrib EntityAttrib;
};
int main()
{
vector<Entity> v = { {a7},{ a1 }, { a5 }, { a9 }, { a4 }, { a6 }, { a8 }, { a2 }, { a3 }, {a0} };
auto parti_tag1_itr=partition(v.begin(), v.end(), [](const Entity& e) {return e.EntityAttrib < tag1; });
int c_front = count_if(v.begin(), v.end(), [](const Entity& e) {return e.EntityAttrib < tag1; });
for(int i=0;i<c_front;i++)
cout << (*(--parti_tag1_itr)).EntityAttrib << endl;
cout << endl;
vector<Entity> front_parti(10);
list<Entity> back_parti(10);
partition_copy(v.begin(), v.end(), back_inserter(front_parti), front_inserter(back_parti), [](const Entity& e) {return e.EntityAttrib > tag1; });
for (auto e : front_parti)
{
cout << e.EntityAttrib << endl;
}
std::string s;
getline(cin, s);
return 0;
}
stable_partition(back_parti.begin(), back_parti.end(), [](const Entity& e) {return e.EntityAttrib < tag2; });
Saturday, November 5, 2016
partition_copy has front back container
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment