Ok, let me try once again, what I am trying to say is:
T *aptr;
and then using
aptr->pop_back();
is not valid.
If you would have had something like
vector<T> aobj;
and then if you would have done
aobj.pop_back();
OR
vector<T> *aptr;
and then
aptr->pop_back();
then these two are valid.
Because
vector<T> aobj;
and
vector<T> *aptr;
ARE VECTOR TYPES. So we can use it's provided functions like
pop_back();
. However, if you write
T *aptr;
and then you write
SimpleVector<int> obj;
then since your
SimpleVector
class is a template class, that means where ever you have written
T
, it would be replaced by the data type you have specified in
SimpleVector<int> obj;
in this case this is an
int
Try this simple code
1 2 3 4 5 6 7
|
int main() {
int i = 10;
int *aptr = &i;
aptr->pop_back(); //invalid
return 0;
}
| |
Do you think above code is valid? NO, it is not valid because
int
is not a class, hence there is no such member function defined named as
pop_back();
. On the other hand
vector
is a Container Class. Therefore, it has a member function named
pop_back();
defined in it's definition. Therefore, you can use
pop_back();
only on the vector type of objects and pointers.