2013-06-07 35 views

Trả lời

12

Bạn chỉ có thể nói a == v, hoặc có lẽ a.size() == v.size() && a == v. Nó có hiệu quả như nó có thể được. (Biểu mẫu thứ hai có kiểm tra kích thước rõ ràng có thể tốt hơn vì thiết lập trình vòng lặp không phải là truy cập ngẫu nhiên.) Cập nhật: Kiểm tra kích thước được ngụ ý [thanks @juanchopanza!]

+0

Tôi sẽ do dự khi nói rằng 'a == b' là nhanh/hiệu quả nhất có thể, vì nó có thể hoặc không thể so sánh thêm đằng sau hậu trường. Nếu không biết thực hiện, bạn không thể nói rằng đó là "nhanh nhất" ra khỏi đó. –

+0

@ RichardJ.RossIII: Nhưng chúng tôi biết việc triển khai, vì nó được chỉ định. –

+0

Tôi nghĩ rằng việc thực hiện chính nó không được chỉ định, chỉ có hành vi, chính xác? Việc triển khai STL khác nhau có thể khác nhau. –

5

Bạn có thể gọi số std::equal overload dùng 3 trình lặp và một biến vị ngữ bổ sung. Vì vậy, chỉ để lại đi kết thúc thứ hai, vì nó không được hiểu như là một lặp kết thúc, nhưng một vị, đó là rác:

std::equal(a.begin(), a.end(), v.begin()) 

Nhưng khi Đánh dấu ammends trong bình luận của ông trong trường hợp này bạn phải làm đảm bảo rằng cả hai kích thước của các thùng chứa đều phù hợp với trước, nếu không bạn sẽ gặp rủi ro khi chạy ở cuối tập thứ hai. Lưu ý rằng C++ 14 sẽ thực sự giới thiệu một quá tải std::equal lấy bốn vòng lặp (đó là những gì bạn dự định) và sẽ làm biến dạng kích thước kiểm tra ngầm, nhưng có vẻ như việc triển khai của bạn chưa hỗ trợ điều này.

Khác với các câu trả lời và nhận xét khác là chính xác trong đó a == v đơn giản hơn, rõ ràng hơn và được sắp xếp hợp lý hơn.

+0

Lưu ý rằng nếu bạn sử dụng 'std :: equal' bạn cũng sẽ cần phải kiểm tra trước nếu các thùng chứa có cùng kích thước, nếu không bạn có thể chạy hết phần thứ hai. –

+0

@MarkRansom Vâng, thực sự. –

Các vấn đề liên quan