Trong C++, vòng lặp để duyệt qua các phần tử của một container (array, stack, queue, list, vector, map, unordered_map, set,…) có thể thực hiện bằng nhiều cách.
1. Sử dụng index
1 |
for(size_t i = 0; i < c.size(); ++i) c[i] = 0; |
Cách trên thì được cái đơn giản nhưng lại dễ bị sử dụng nhầm toán tử so sánh hoặc dùng nhầm biến index. Quan trọng là những lỗi kiểu này có thể không phát hiện được khi compile mà chỉ xảy ra lúc runtime, gây khó khăn khi điều tra. Ví dụ như sau →
1 |
for(size_t i = 0; i <= c.size(); ++j) c[i] = 0; |
2. Sử dụng iterators
Cũng có thể duyệt qua các phần tử của container sử dụng iterator với hạn chế tương tự như dùng index. Tuy nhiên chỉ có thể áp dụng với những container nào có hàm begin() và end() →
1 |
for(iterator it = c.begin(); it != c.end(); ++it) (*it) = 0; |
3. Sử dụng for kết hợp với range-based và auto keyword
Từ C++11 thì chúng ta có thể duyệt qua các phần tử của container bằng cách như sau →
1 |
for(auto& x : c) x = 0; |
4. Sử dụng auto, begin, end
Cũng từ C++11 chúng ta có thể duyệt như sau →
1 2 3 4 5 |
for(auto current = c.begin(), end = c.end(); current != end; ++current) { cout << ' ' << *current; // ... } |
— Phạm Minh Tuấn (Shun) —
