fork(4) download
  1. #include <algorithm>
  2. #include <iostream>
  3. #include <stdexcept>
  4.  
  5. template<class C>
  6. auto median(C const& c){
  7. using std::begin; using std::end;
  8. auto start = begin(c);
  9. auto finish = end(c);
  10. using iterator = decltype(start);
  11. std::vector<iterator> working;
  12. for(auto it = start; it != finish; ++it)
  13. working.push_back(it);
  14. if (working.empty())
  15. return start;
  16. std::nth_element(
  17. begin(working), begin(working) + working.size() / 2, end(working),
  18. [](iterator lhs, iterator rhs){
  19. return *lhs < *rhs;
  20. }
  21. );
  22. return *(begin(working) + working.size() / 2);
  23. }
  24.  
  25. int main() {
  26. std::vector<int> v {4, 8, 15, 16, 23, 42};
  27.  
  28. std::cout << *median(v) << std::endl;
  29. }
Success #stdin #stdout 0s 3416KB
stdin
Standard input is empty
stdout
16