Operator * on iterator of type T will result in reference to type T (T&), right (i.e. not type T itself or some other types)?
It depends on the kind of iterator. According to the C++ standard:

Input iterators: result is convertible to T
Output iterators: result is not used
Forward, bi-directional and random access iterators: result is T&