Mọi container (vector, list, deque,...) của thư viện C++ STL đều có iterator. Iterator có thể dịch nôm na là con trỏ duyệt, là một thành phần rất quan trọng để xử lý các thao tác trên container. Con trỏ (pointer) trong mảng C bình thường chính là một loại iterator đấy. Ví dụ:
int a[5];
a[2] = 3; //thực ra là bên dưới xảy ra thế này *(a+2) = 3
Trong trường hợp trên a (con trỏ hằng) chính là iterator của mảng a[5].
Đối với vector cũng vậy, cho std::vector<int> vec. Khi bạn gọi vec[i] thì thật chất bên dưới xảy ra như thế này:
return *(vec.begin() + i); //vec.begin() là iterator chỉ đến đầu vector
Hoặc là gọi vec.size():
return vec.end() - vec.begin(); //vector.end() là iterator chỉ đến ngay sau phần tử cuối của vector
Tóm lại mọi xử lý trên mọi container đều thông qua các iterator bên dưới. List không có operator [] bởi vì cấu trúc lưu trữ của list rời rạc, không liền mạch bộ nhớ, nên iterator của list so với vector cũng khác và không truy suất ngay *(lst.begin() + i) như vector được, mà chỉ có thể tăng iterator từ từ.