fork(1) download
  1. #include <vector>
  2. #include <initializer_list>
  3. #include <iostream>
  4.  
  5.  
  6. template<typename Y, size_t N, typename T>
  7. struct Flattener : public Flattener<Y, N-1, std::initializer_list<T>> {
  8. std::vector<Y> flatten(std::initializer_list<T> l) {
  9. std::vector<Y> vec;
  10. for (auto & e : l)
  11. {
  12. std::vector<Y> nvec = Flattener<Y, N, Y>{}.flatten(e);
  13. vec.insert(end(vec), begin(nvec), end(nvec));
  14. }
  15. return vec;
  16. };
  17. using Flattener<Y, N-1, std::initializer_list<T>>::flatten;
  18. };
  19.  
  20. template<typename Y, typename T>
  21. struct Flattener<Y, 0, T> {
  22. std::vector<Y> flatten(Y y) { return {{y}}; };
  23. };
  24.  
  25. int main()
  26. {
  27. auto v = Flattener<int, 10, int>{}.flatten({{{1,2}, {3,4,5}}});
  28. for (auto e : v) std::cout << e << std::endl;
  29. }
Success #stdin #stdout 0s 4316KB
stdin
Standard input is empty
stdout
1
2
3
4
5