#include <vector>
#include <cstddef>
#include <iostream>

struct foo {
    double data;
};

class VectorReserveItr : public std::iterator<std::input_iterator_tag, foo> {
  size_t i;
  size_t capacity;
public:
  VectorReserveItr(size_t i, size_t capacity) :i(i), capacity(capacity) {}
  VectorReserveItr& operator++() {++i;return *this;}
  bool operator!=(const VectorReserveItr& rhs) {return i!=rhs.i;}
  std::vector<foo> operator*() {
      std::vector<foo> ret;
      ret.reserve(capacity);
      return ret;
  }
};

int main() {
    std::vector<std::vector<foo>> v(VectorReserveItr(0, 1000), VectorReserveItr(100, 1000));
    std::cout << "vec size " << v.size() << "\n";
    std::cout << "vec[0] capacity " << v[0].capacity() << "\n";
}