Iterator trong C++ là một đối tượng tương tự như con trỏ, nó được sử dụng trỏ đến các phần tử trong container của STL như vector, set, map...
1. Iterator Và Vector
Iterator tương tự như con trỏ, nó trỏ tới các phần tử trong vector và là một kiến thức cực kỳ quan trọng. Nó giúp các bạn có thể sử dụng được các hàm, thuật toán trong thư viện STL
Có 4 iterator chính trong vector mà bạn cần nắm được :
- begin() : Iterator trỏ tới phần tử đầu tiên trong vector
- end() : Iterator trỏ tới phần tử sau phần tử cuối cùng trong vector
- rbegin() : Iterator ngược trỏ tới phần tử cuối cùng trong vector
- rend() : Iterator ngược trỏ tới phần tử trước phần tử đầu tiên trong vector

Cú pháp khai báo iterator :
vector<data_type>reverse_iterator iterator_name;
Tương tự như con trỏ thì khi bạn muốn truy cập vào phần tử mà iterator trong vector đang trỏ tới bạn cần giải tham chiếu bằng toán tử *
Ví dụ 1 :
#include <vector>
using namespace std;
int main() {
vector<int> v = {28, 100, 30, 20, 15};
vector<int>::iterator it1 = v.begin();
cout << "v[0] = " << *it1 << endl;
vector<int>::reverse_iterator it2 = v.rbegin();
cout << "v[4] = " << *it2 << endl;
return 0;
}
Output :
v[4] = 15
Ví dụ 2 : Duyệt vector bằng iterator
#include <vector>
using namespace std;
int main() {
vector<int> v = {28, 100, 30, 20, 15};
cout << "Duyet vector bang iterator : \n";
for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
cout << *it << " ";
}
cout << "\nDuyet nguoc vector bang iterator nguoc : \n";
for (vector<int>::reverse_iterator it = v.rbegin(); it != v.rend(); ++it) {
cout << *it << ' ';
}
return 0;
}
Output :
28 100 30 20 15
Duyet nguoc vector bang iterator nguoc :
15 20 30 100 28
Chú ý : Bạn có thể thay vector::iterator hay vector::reverse_iterator bằng kiểu auto, bạn có thể tham khảo thêm về kiểu auto C++ tại đây: Kiểu dữ liệu suy luận auto.
Ví dụ 3 : Iterator trỏ tới phần tử có chỉ số x trong mảng là begin() + x
#include <vector>
using namespace std;
int main() {
vector<int> v = {28, 100, 30, 20, 15};
vector<int>::iterator it1 = v.begin() + 2;
cout << "v[2] = " << *it1 << endl;
auto it2 = v.begin() + 4;
cout << "v[4] = " << *it2 << endl;
}
Output :
v[4] = 15
2. Các Toán Tử Với Iterator
Iterator hỗ trợ các toán tử ++, -- hoặc toán tử toán học để bạn có thể di chuyển iterator qua lại các phần tử trong vector.
Ví dụ 1 :
#include <vector>
using namespace std;
int main() {
vector<int> v = {100, 200, 300, 400, 500};
vector<int>::iterator it = v.begin();
cout << "v[0] = " << *it << endl;
++it; // it1 => v[1]
cout << "v[1] = " << *it << endl;
it += 2; // it1 => v[3]
cout << "v[3] = " << *it << endl;
--it; // it1 => v[2]
cout << "v[2] = " << *it << endl;
}
Output :
v[1] = 200
v[3] = 400
v[2] = 300
Bạn cũng có thể tính khoảng cách giữa 2 iterator hoặc tìm ra chỉ số của phần tử mà iterator đang trỏ tới bằng cách sử dụng toán tử hoặc dùng hàm distance()
Ví dụ 2 :
#include <vector>
using namespace std;
int main() {
vector<int> v = {100, 200, 300, 400, 500};
vector<int>::iterator it = v.begin();
it += 3;
cout << "Chi so cua phan tu ma it dang tro toi : " << it - v.begin() << endl;
cout << "Chi so cua phan tu ma it dang tro toi : " << distance(v.begin(), it) << endl;
}
Output :
Chi so cua phan tu ma it dang tro toi : 3