vector<int> data(istream_iterator<int>(cin),
istream_iterator<int>{}); cout<<"Size is : " << data.size() << endl; //compile success
vector<int> data1(istream_iterator<int>(cin),
std::allocator<int>{}); cout<<"Size is : " << data1.size() << endl; //compile failure
error: no matching function for call to ‘std::vector<int>::vector(std::istream_iterator<int>, std::allocator<int>)’ vector<int> data1(istream_iterator<int>(cin), std::allocator<int>{});
Why is the first statement fine but second? Doesn't the vector take int type allocator in this case? I am experimenting with allocators.
istream_iterator<int>{}represents the matching end iterator foristream_iterator<int>(cin)as begin iterator. (For input iterators, it's valid to use a default constructed (aka. singular iterator) as end iterator - as I recently learnt.)istream_iterator<int>{}is not an allocator. It's a sentinel iterator (end iterator for a stream)