Tôi làm việc với rất nhiều mã tính toán được viết bằng C ++ với hiệu suất cao và chi phí bộ nhớ thấp trong tâm trí. Nó sử dụng các vùng chứa STL (hầu hết vector
) rất nhiều và lặp lại các vùng chứa đó hầu như trong mọi chức năng.
Mã lặp lại trông giống như sau:
for (int i = 0; i < things.size(); ++i)
{
// ...
}
nhưng nó tạo ra cảnh báo không khớp có dấu / chưa ký (C4018 trong Visual Studio).
Thay thế int
bằng một số unsigned
loại là một vấn đề vì chúng tôi thường xuyên sử dụng OpenMP pragmas và nó yêu cầu bộ đếm int
.
Tôi sắp loại bỏ (hàng trăm) cảnh báo, nhưng tôi sợ rằng mình đã bỏ lỡ một số giải pháp hữu ích cho vấn đề.
Trên trình lặp . Tôi nghĩ rằng các trình lặp là tuyệt vời khi được áp dụng ở những nơi thích hợp. Mã mà tôi đang làm việc sẽ không bao giờ thay đổi các vùng chứa truy cập ngẫu nhiên thành list
hoặc thứ gì đó (vì vậy việc lặp lại với vùng int i
chứa đã là bất khả tri đối với vùng chứa) và sẽ luôn cần chỉ mục hiện tại. Và tất cả các mã bổ sung bạn cần nhập (chính trình lặp và chỉ mục) chỉ làm phức tạp thêm vấn đề và làm xáo trộn tính đơn giản của mã cơ bản.
int
.