Đây là một câu trả lời khác mà dường như không ai nghĩ ra. for
các vòng lặp nên được sử dụng khi bạn cần lặp lại qua một chuỗi . Sử dụng !=
là phương pháp ngắn gọn nhất để nêu điều kiện kết thúc cho vòng lặp. Tuy nhiên, sử dụng một toán tử ít hạn chế hơn là một thành ngữ lập trình phòng thủ rất phổ biến. Đối với số nguyên, điều đó không thành vấn đề - đó chỉ là một lựa chọn cá nhân mà không có ví dụ cụ thể hơn. Vòng qua các bộ sưu tập với các trình vòng lặp mà bạn muốn sử dụng !=
vì những lý do mà những người khác đã nêu. Nếu bạn xem xét các chuỗi của float
hoặc double
, thì bạn muốn tránh!=
bằng mọi giá.
Những gì tôi muốn chỉ ra là nó for
được sử dụng khi bạn cần lặp lại qua một chuỗi. Trình tự được tạo có điểm bắt đầu, khoảng thời gian và điều kiện kết thúc. Đây là những quy định chính xác trong for
tuyên bố. Nếu bạn thấy mình (1) không bao gồm phần bước của for
hoặc (2) chỉ định một cái gì đó như true
điều kiện bảo vệ, thì bạn không nên sử dụngfor
vòng lặp!
Các while
vòng lặp được sử dụng để tiếp tục xử lý trong khi một điều kiện cụ thể được đáp ứng. Nếu bạn không xử lý một chuỗi, thì có lẽ bạn muốn một while
vòng lặp thay thế. Các đối số điều kiện bảo vệ là tương tự ở đây, nhưng quyết định giữa a while
và for
vòng lặp phải là một ý thức rất có ý thức. Cácwhile
vòng lặp là được đánh giá đúng trong vòng tròn C ++ IMO.
Nếu bạn đang xử lý một bộ sưu tập các mục (một for
cách sử dụng -loop rất phổ biến ), thì bạn thực sự nên sử dụng một phương pháp chuyên biệt hơn. Thật không may, std::for_each
là khá đau đớn trong C ++ vì một số lý do. Trong nhiều trường hợp tách phần thân của một for
vòng lặp trong một chức năng đứng tự do (trong khi hơi đau) dẫn đến một giải pháp sạch hơn nhiều. Khi làm việc với các bộ sưu tập, xem xét std::for_each
, std::transform
hoặc std::accumulate
. Việc thực hiện nhiều thuật toán trở nên súc tích và rõ ràng khi được thể hiện theo cách này. Chưa kể đến việc cô lập phần thân của vòng lặp thành một hàm / phương thức riêng biệt buộc bạn phải tập trung vào thuật toán, các yêu cầu đầu vào và kết quả của nó.
Nếu bạn đang sử dụng Java, Python, Ruby hoặc thậm chí C ++ 0x , thì bạn nên sử dụng một vòng lặp foreach bộ sưu tập thích hợp . Khi trình biên dịch C ++ thực hiện tính năng này, một số for
vòng lặp sẽ biến mất theo các kiểu thảo luận này.
int i = 10; while(i --> 0) { /* stuff */ }