fork(3) download
  1. #include <iostream>
  2. #include <vector>
  3. #include <type_traits>
  4.  
  5. using namespace std;
  6.  
  7. template <typename T>
  8. struct NaiveVector {
  9. vector<T> v;
  10. NaiveVector(size_t num, const T &val) : v(num, val) {
  11. cout << "(int num, const T &val)" << endl;
  12. }
  13.  
  14. template
  15. <
  16. typename InputIterator
  17. , typename = typename ::std::enable_if
  18. <
  19. ::std::is_same
  20. <
  21. T &
  22. , typename ::std::remove_const
  23. <
  24. decltype(*(::std::declval< InputIterator >()))
  25. >::type
  26. >::value
  27. , void
  28. >::type
  29. >
  30. NaiveVector(InputIterator first, InputIterator last) : v(first, last) {
  31. cout << "(InputIterator first, InputIterator last)" << endl;
  32. }
  33.  
  34. size_t size() const { return v.size(); }
  35. };
  36.  
  37. int main() {
  38. NaiveVector<int> myVec1(5,1);
  39. cout << "size = " << myVec1.size() << endl;
  40. for (auto n : myVec1.v) { cout << n << " "; }
  41. cout << endl;
  42.  
  43. cout << "-----" << endl;
  44.  
  45. vector<int> vec({1,2,3,4,5});
  46. NaiveVector<int> myVec2(vec.begin(), vec.end());
  47. cout << "size = " << myVec2.size() << endl;
  48. for (auto n : myVec2.v) { cout << n << " "; }
  49. cout << endl;
  50. }
Success #stdin #stdout 0s 16064KB
stdin
Standard input is empty
stdout
(int num, const T &val)
size = 5
1 1 1 1 1 
-----
(InputIterator first, InputIterator last)
size = 5
1 2 3 4 5