Đây là một câu trả lời khác mà dường như không ai nghĩ ra. forcá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 floathoặ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 fortuyên bố. Nếu bạn thấy mình (1) không bao gồm phần bước của forhoặ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 whilevò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 whilevò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 whilevà forvò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 forcá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_eachlà 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 forvò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::transformhoặ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ố forvò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 */ }