Phạm vi dựa trên vòng lặp for được thêm vào trong tiêu chuẩn C ++ 11 và là một dạng nhỏ gọn hơn so với dạng tương đương truyền thống của nó. Phạm vi dựa trên vòng lặp for được sử dụng để lặp qua các phần tử của vùng chứa từ đầu đến cuối. Cú pháp cho vòng lặp for dựa trên phạm vi như sau -
Cú pháp
for( range-declaration : range-expression ) loop statement
khai báo phạm vi - nó là khai báo của một biến có kiểu giống như kiểu của các phần tử của biểu thức phạm vi. Thường thì từ khóa tự động được sử dụng để tự động xác định loại phần tử trong biểu thức phạm vi.
biểu thức phạm vi - bất kỳ biểu thức nào được sử dụng để biểu diễn một chuỗi các phần tử. Ngoài ra, dãy các phần tử trong dấu ngoặc nhọn có thể được sử dụng.
câu lệnh lặp - phần thân của vòng lặp for chứa một hoặc nhiều câu lệnh sẽ được thực thi lặp đi lặp lại cho đến khi kết thúc biểu thức phạm vi.
So sánh với vòng lặp for truyền thống -
// Iterating over array int arr[] = { 10,20,30,40,50 }; for (int num : arr) printf("%d, ",num); Is same as: for ( int i=0;i<5;i++ ) printf("%d, ",arr[i]);
Ở đây ta có thể dễ dàng thấy rằng không cần tính kích thước của mảng trong vòng lặp rangebasedfor, do đó không cần biểu thức điều kiện. Ngoài ra, không có yêu cầu về hoạt động tăng hoặc giảm. Số trong phạm vi dựa trên vòng lặp for ở trên cho mỗi lần lặp nhận giá trị của phần tử từ mảng arr [] từ đầu giai đoạn đầu. Không có phần tử nào bị bỏ qua cho đến khi một trong các câu lệnh nhảy được thực thi.
Giải lao - kết thúc vòng lặp cho tất cả các lần lặp lại.
Tiếp tục - bỏ qua lần lặp hiện tại và chuyển sang lần tiếp theo
goto - nhảy ra khỏi vòng lặp đến câu lệnh theo sau là nhãn -
Ưu điểm của dựa trên phạm vi đối với
-
Cú pháp dễ sử dụng và đơn giản.
-
Không cần tính số phần tử trong vùng chứa hoặc kích thước của biểu thức phạm vi.
-
Nếu kiểu dữ liệu của khai báo phạm vi không được biết thì có thể sử dụng công cụ chỉ định tự động trong nó, điều này sẽ tự động làm cho nó tương thích với kiểu của biểu thức phạm vi.
-
Không cần câu lệnh điều kiện hoặc câu lệnh tăng / giảm.
-
Tốt nhất trong trường hợp toàn bộ vùng chứa được lặp lại trong một lần.
Nhược điểm của dựa trên phạm vi đối với
-
Lặp lại mọi phần tử giữa begin () và end (). Không thể xử lý các chỉ mục cụ thể.
-
Không thể xem lại một hoặc nhiều phần tử và bỏ qua một nhóm phần tử bằng vòng lặp for dựa trên dải ô.
-
Không thể lặp lại mảng theo thứ tự ngược lại. Đối với thư viện
đó được sử dụng
Ví dụ
#include <iostream> #include <vector> #include <map> int main(){ int arr[] = { 10,20,30,40,50 }; // traditional for for ( int i=0;i<5;i++ ) printf("%d, ",arr[i]); printf("\n"); for (int num : arr) printf("%d, ",num); printf("\n"); // for character array char str[] = "Hello World"; for (char c : str) printf("%c ",c); printf("\n"); for (char c : "Hello World") printf("%c ",c); printf("\n"); std::map <int, char> MAP({{1, 'A'}, {2, 'B'}, {3, 'C'}}); for (auto m : MAP) printf("{ %d, %c }", m.first,m.second); }
Đầu ra
10, 20, 30, 40, 50, 10, 20, 30, 40, 50, H e l l o W o r l d H e l l o W o r l d { 1, A }{ 2, B }{ 3, C }