Saturday, November 5, 2016

nth_element as percentile and std::copy vs std::move

= is simpler than std::copy, while std::move clear original vector. n
std::equal actually iterate through vector to compare.

note copy are needed since nth_element will shuffle elements in place.

#include "stdafx.h"
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <iterator>

using namespace std;

int main()
{
 vector<int> v{ 7,1,5,9,4,6,8,2,9,0,3 };
 vector<int> v_cp=v;
 //vector<int> v_cp(11);
 //std::copy(v.begin(), v.end(), v_cp.begin());
 cout << (equal(v.begin(), v.end(), v_cp.begin())?"true":"false")<< endl;
 vector<int> v_mv = std::move(v);
 cout << (equal(v_mv.begin(), v_mv.end(), v_cp.begin()) ? "true" : "false") << endl;

 const size_t pctil = v_cp.size()*0.75;
 nth_element(v_cp.begin(), v_cp.begin() + pctil, v_cp.end());
 cout <<"percentile elem="<< v_cp[pctil] << endl;

 v_cp.clear();
 cout << "sizes " << v.size() << " " << v_cp.size() << " " << v_mv.size() << endl;

 std::string s;
 getline(cin, s);
    return 0;
}

No comments:

Post a Comment