fork(1) download
  1. #include <vector>
  2. #include <list>
  3. #include <iostream>
  4.  
  5. using namespace std;
  6.  
  7. vector<vector<int>> split(const vector<int>& v, size_t n)
  8. {
  9. vector<vector<int>> r;
  10. for(size_t i = 0, S = v.size(), m = (S+n-1)/n; i < m; ++i)
  11. r.emplace_back(v.begin()+i*n,v.begin()+i*n+(i==m-1&&S%n?S%n:n));
  12. return r;
  13. }
  14.  
  15. template<typename Iterator>
  16. vector<vector<typename Iterator::value_type>>
  17. split(Iterator b, Iterator e, size_t n)
  18. {
  19. vector<vector<typename Iterator::value_type>> r;
  20. while(b != e)
  21. {
  22. Iterator start = b;
  23. size_t m = n;
  24. while(m-- && b != e) b = next(b);
  25. r.emplace_back(start,b);
  26. }
  27. return r;
  28. }
  29.  
  30.  
  31. int main(int argc, char * argv[])
  32. {
  33. for(auto a: split({1,2,3,4,5,6,7,8,9,10},3))
  34. {
  35. for(auto b: a) cout << b << " ";
  36. cout << "\n";
  37. }
  38. list<int> L = {1,2,3,4,5,6,7,8,9,10};
  39. for(auto a: split(L.begin(),L.end(),3))
  40. {
  41. for(auto b: a) cout << b << " ";
  42. cout << "\n";
  43. }
  44. }
  45.  
Success #stdin #stdout 0.01s 5436KB
stdin
Standard input is empty
stdout
1  2  3  
4  5  6  
7  8  9  
10  
1  2  3  
4  5  6  
7  8  9  
10