Nếu bạn đã quen với C / C ++ thì mã này không quá khó đọc, mặc dù nó khá ngắn gọn và không phải là mã tuyệt vời. Vì vậy, hãy để tôi giải thích những phần có nhiều Cism hơn bất cứ điều gì khác. Trước hết, cú pháp chung của vòng lặp C for trông như thế này:
for (<initialization> ; <condition>; <increment>)
{
<code...>
}
Mã khởi tạo được chạy một lần. Sau đó, điều kiện được kiểm tra trước mỗi vòng lặp và cuối cùng là gia số được gọi sau mỗi vòng lặp. Vì vậy, trong ví dụ của bạn, bạn sẽ tìm thấy điều kiện làu--
Tại sao u--
hoạt động như một điều kiện trong C mà không phải C #? Bởi vì C ngầm chuyển đổi rất nhiều thứ quá đỗi và nó có thể gây rắc rối. Đối với một số bất cứ điều gì khác không là đúng và không là sai. Vì vậy, nó sẽ đếm ngược từ b.size () - 1 đến 0. Có tác dụng phụ trong điều kiện là một chút khó chịu và tốt hơn là đặt nó trong phần tăng của vòng lặp for, mặc dù rất nhiều C mã làm điều này. Nếu tôi viết nó tôi sẽ làm nó giống như thế này:
for (u = b.size() - 1, v = b.back(); u>=0; --u)
{
b[u] = v;
v = p[v]
}
Lý do cho điều này là, với tôi ít nhất, nó rõ ràng hơn. Mỗi phần của vòng lặp for thực hiện công việc của nó và không có gì khác. Trong mã ban đầu, điều kiện là sửa đổi biến. Phần tăng đã làm một cái gì đó nên có trong khối mã, v.v.
Toán tử dấu phẩy cũng có thể ném cho bạn một vòng lặp. Trong C, một cái gì đó x=1,y=2
trông giống như một câu lệnh liên quan đến trình biên dịch và phù hợp với mã khởi tạo. Nó chỉ đánh giá từng bộ phận và trả về giá trị của phần cuối cùng. Ví dụ:
std::cout << "(1,2)=" << (1,2) << std::endl;
sẽ in ra 2.
u--
. Các dấu chấm phẩy được sử dụng để phân định các phần khác nhau củafor
tuyên bố.