1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
class Pocket {
int value;
public:
Pocket(int value):value(value){}
int getValue() const { return value; }
bool operator < (const Pocket & _Right) const { return value < _Right.value; } };
ostream & operator <<(ostream & stream, const Pocket & pocket)
{ stream << pocket.getValue() << " "; return stream; }
void printer(Pocket i) { cout << i << ", "; }
int main() {
Pocket mynumbers1[]={ 3, 9, 0, 2};
//sort(mynumbers1, mynumbers1 + 4);
//4 == proxy for 1 past the end iterator, following link says it may not be good practice
//http://stackoverflow.com/questions/5897319/how-to-use-stdsort-to-sort-an-array-in-c
std::sort(std::begin(mynumbers1), std::end(mynumbers1));
for (size_t i = 0; i < 4; ++ i)std::cout << mynumbers1[i];
std::cout << '\n';
vector<Pocket> v1(mynumbers1, mynumbers1 + (sizeof(mynumbers1)/sizeof(mynumbers1[0])));
inplace_merge(v1.begin(), v1.begin()+1, v1.end());//LINE II
// inplace_merge(v1.begin(), v1.begin()+2, v1.end(), [](const Pocket& lhs, const Pocket& rhs){return lhs.getValue() < rhs.getValue();});//LINE II
//alternative using lambda, not strictly required as operator < has already been overloaded
for_each(v1.begin(), v1.end(), printer); return 0;
}
|