In plain C, the pointer type serves three different roles. The first we just saw: to iterate through arrays. The second is to efficiently pass large objects, or to receive return values, through parameters. The third is to refer to to objects allocated with the new operator.
C++ provides replacement facilities for each of these roles. The pointer container and iterators we have seen, and we looked at reference parameters when we discussed functions. Dynamic allocation with new is still ahead.
It's probably not true that pointers are unnecessary in C++, but they have less and less to do.