#include <iostream>
#include <vector>
#include <type_traits>
using namespace std;
template <typename T>
struct NaiveVector {
vector<T> v;
NaiveVector(size_t num, const T &val) : v(num, val) {
cout << "(int num, const T &val)" << endl;
}
template
<
typename InputIterator
, typename = typename ::std::enable_if
<
::std::is_same
<
T &
, typename ::std::remove_const
<
decltype(*(::std::declval< InputIterator >()))
>::type
>::value
, void
>::type
>
NaiveVector(InputIterator first, InputIterator last) : v(first, last) {
cout << "(InputIterator first, InputIterator last)" << endl;
}
size_t size() const { return v.size(); }
};
int main() {
NaiveVector<int> myVec1(5,1);
cout << "size = " << myVec1.size() << endl;
for (auto n : myVec1.v) { cout << n << " "; }
cout << endl;
cout << "-----" << endl;
vector<int> vec({1,2,3,4,5});
NaiveVector<int> myVec2(vec.begin(), vec.end());
cout << "size = " << myVec2.size() << endl;
for (auto n : myVec2.v) { cout << n << " "; }
cout << endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBOYWl2ZVZlY3RvciB7CiAgdmVjdG9yPFQ+IHY7CiAgTmFpdmVWZWN0b3Ioc2l6ZV90IG51bSwgY29uc3QgVCAmdmFsKSA6IHYobnVtLCB2YWwpIHsKICAgIGNvdXQgPDwgIihpbnQgbnVtLCBjb25zdCBUICZ2YWwpIiA8PCBlbmRsOwogIH0KCiAgdGVtcGxhdGUKICA8CiAgICB0eXBlbmFtZSBJbnB1dEl0ZXJhdG9yCiAgLCB0eXBlbmFtZSA9IHR5cGVuYW1lIDo6c3RkOjplbmFibGVfaWYKICAgIDwKICAgICAgOjpzdGQ6OmlzX3NhbWUKICAgICAgPAogICAgICAgIFQgJgogICAgICAsIHR5cGVuYW1lIDo6c3RkOjpyZW1vdmVfY29uc3QKICAgICAgICA8CiAgICAgICAgICBkZWNsdHlwZSgqKDo6c3RkOjpkZWNsdmFsPCBJbnB1dEl0ZXJhdG9yID4oKSkpCiAgICAgICAgPjo6dHlwZQogICAgICA+Ojp2YWx1ZQogICAgLCAgdm9pZAogICAgPjo6dHlwZQogID4KICBOYWl2ZVZlY3RvcihJbnB1dEl0ZXJhdG9yIGZpcnN0LCBJbnB1dEl0ZXJhdG9yIGxhc3QpIDogdihmaXJzdCwgbGFzdCkgewogICAgY291dCA8PCAiKElucHV0SXRlcmF0b3IgZmlyc3QsIElucHV0SXRlcmF0b3IgbGFzdCkiIDw8IGVuZGw7CiAgfQoKICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHYuc2l6ZSgpOyB9Cn07CgppbnQgbWFpbigpIHsKICBOYWl2ZVZlY3RvcjxpbnQ+IG15VmVjMSg1LDEpOwogIGNvdXQgPDwgInNpemUgPSAiIDw8IG15VmVjMS5zaXplKCkgPDwgZW5kbDsKICBmb3IgKGF1dG8gbiA6IG15VmVjMS52KSB7IGNvdXQgPDwgbiA8PCAiICI7IH0KICBjb3V0IDw8IGVuZGw7CgogIGNvdXQgPDwgIi0tLS0tIiA8PCBlbmRsOwoKICB2ZWN0b3I8aW50PiB2ZWMoezEsMiwzLDQsNX0pOwogIE5haXZlVmVjdG9yPGludD4gbXlWZWMyKHZlYy5iZWdpbigpLCB2ZWMuZW5kKCkpOwogIGNvdXQgPDwgInNpemUgPSAiIDw8IG15VmVjMi5zaXplKCkgPDwgZW5kbDsKICBmb3IgKGF1dG8gbiA6IG15VmVjMi52KSB7IGNvdXQgPDwgbiA8PCAiICI7IH0KICBjb3V0IDw8IGVuZGw7Cn0=