Существует так много альтернативных способов обращения к элементам вектора.
Я мог бы использовать указатель так:
vector<int> v = {10, 11, 12};
int *p = &v[0];
cout << *p; //Outputs "10"
Я тоже мог бы использовать указатель:
vector<int> v = {10, 11, 12};
vector<int>::pointer p = v.data();
cout << *p; //Outputs "10"
Я мог бы также использовать тип итератора:
vector<int> v = {10, 11, 12};
vector<int>::iterator i = v.begin();
cout << *i; //Outputs "10"
Есть ли существенные различия, которые я здесь отсутствует?