In this case, an item in the vector - vec[i] - would be a pointer.
1 2 3
Course* c = new CScourse(); //correction
assert( vec.back() == c ) ; // the vector holds a copy of the pointer
And an iterator - vec.begin() - would 'point' to the pointer.
&(*c) == c ;
1 2 3 4 5
int object = 78 ;
int* pointer = &object ; // pointer holds the address of the object
int& reference = *pointer ; // dereference the pointer and we get an alias for the object
int* another_pointer = &reference ; // another_pointer == pointer
assert( &*pointer == pointer ) ;